入力データレコードでの値の位置を指定し、読み込んだ値を対応するSAS変数に割り当てます。
該当要素: | DATAステップ |
カテゴリ: | ファイル操作 |
種類: | 実行 |
次を指定できます。
読み込む値を割り当てる変数名を1つ指定します。
読み込む値を割り当てる変数名のリストを指定します。
要件 | (variable-list)の後ろに(informat-list)を指定します。 |
参照項目 | 変数と入力形式をグループ化する方法 |
変数の値を数値ではなく文字値として格納するように指定します。
ヒント | この変数が文字変数と事前に定義されている場合、$を指定する必要はありません。 |
例 | INPUTステートメントで複数のスタイルを使用する |
入力バッファ内の指定した行または列に入力ポインタを移動させます。
参照項目 | カラムポインタコントロール および 行ポインタコントロール |
読み込む値が含まれる入力レコードの列を指定します。
ヒント | 入力形式は無視されます。この方法では、標準の文字データと数値データのみ正しく読み込めます。 |
参照項目 | カラム入力 |
例 | INPUTステートメントで複数のスタイルを使用する |
修飾リスト入力を使用できるようにします。また、入力値にエラーが発生したときにSASログに出力する情報の量を制御します。
ヒント | 修飾リスト入力を使用すると、単純リスト入力では読み込めないデータを読み込めます。 |
参照項目 | リスト入力の使用が求められる場合 およびエラーレポートのフォーマット修飾子 |
例 | 文字変数でポインタの位置を指定する |
変数の値の読み込みに使用する入力形式を指定します。
ヒント | 修飾リスト入力を使用すると、入力形式を指定したデータを読み込めます。修飾リスト入力は、データに入力形式が必要ですが、値の列位置が揃っていないためフォーマット入力ではデータを読み込めない場合に使用すると便利です。 |
参照項目 | フォーマット入力 および リスト入力 |
例 | 入力形式リストを使用する |
入力形式のリストを指定します。このリストは、前の位置に指定した変数リストの値の読み込みに使用します。
制限事項 | (informat-list)は(variable-list)の後ろに指定する必要があります。 |
参照項目 | 変数と入力形式をグループ化する方法 |
次のINPUTステートメントの実行時に使用できるように入力行を保持します。DATAステップの同一の反復内で保持されます。このラインホールド指定子は、後置@と呼ばれます。
制限事項 | 後置@は、INPUTステートメントの最後の項目として指定する必要があります。 |
ヒント | 後置@を指定すると、次のINPUTステートメントによって、現在の入力レコードの開放や入力バッファへの次のレコードの読み込みが自動的に実行されなくなります。後置@は、同じレコードを何度も読み込む必要がある場合に便利です。 |
参照項目 | ラインホールド指定子の使用 |
例 | 入力バッファ内のレコードを保持する |
次のINPUTステートメントの実行時に使用できるように入力行を保持します。DATAステップの反復間を通して保持されます。このラインホールド指定子は、後置@@と呼ばれます。
制限事項 | 後置@@は、INPUTステートメントの最後の項目として指定する必要があります。 |
ヒント | 後置@@は、それぞれの入力行に複数のオブザベーションの値が含まれる場合や、DATAステップの次の繰り返しでレコードをもう一度読み込む必要がある場合に便利です。 |
参照項目 | ラインホールド指定子の使用 |
例 | DATAステップの反復間を通してレコードを保持する |
ポインタを列nに移動させます。
範囲 | 正の整数 |
ヒント | nが整数ではない場合、小数点以下の値を切り捨て、整数の値のみを使用します。nが0または負の場合、ポインタは列1に移動します。 |
例 | @15と指定すると、ポインタは列15に移動します。input @15 name $10.; |
例 | ポインタを後方(左)に移動する |
指定したnumeric-variableの値が示す列にポインタを移動させます。
範囲 | 正の整数 |
ヒント | numeric-variableの値が整数ではない場合、小数点以下の値を切り捨て、整数の値のみを使用します。numeric-variableの値が0または負の整数の場合、ポインタを列1に移動させます。 |
例 | 変数Aの値に従って、ポインタは列15に移動します。a=15; input @a name $10.; |
例 | 数値変数でポインタの位置を指定する |
指定したexpressionの値が示す列にポインタを移動させます。
制限事項 | expressionの実行結果は正の整数でなければなりません。 |
ヒント | expressionの実行結果が整数ではない場合、小数点以下の値を切り捨て、整数の値のみを使用します。値が0または負の整数の場合、ポインタを列1に移動させます。 |
例 | 式の実行結果に従って、ポインタを列15に移動します。b=5; input @(b*3) name $10.; |
指定したcharacter-stringを入力レコードから検索し、検出された文字列の終わりから1番目の列にポインタを移動させます。
指定したcharacter-variableの値が示す文字列を入力レコードから検索し、検出された文字列の終わりから1番目の列にポインタを移動させます。
例 | 次のステートメントでは、文字変数WEEKDAYを読み込みます。2番目に指定した@1に従って、ポインタを入力行の先頭に移動させます。変数SALESの値は、変数WEEKDAYの値の後方の非ブランク列から読み込まれます。
input @1 day 1. @5 weekday $10. @1 @weekday sales 8.2; |
例 | 文字変数でポインタの位置を指定する |
指定したcharacter-expressionの値が示す文字列を入力レコードから検索し、検出された文字列の終わりから1番目の列にポインタを移動させます。
例 | 文字変数でポインタの位置を指定する |
nに指定した列数だけポインタを移動させます。
範囲 | 正の整数または0 |
ヒント | nが整数ではない場合、小数点以下の値を切り捨て、整数の値のみを使用します。この値が入力バッファの長さを超える場合、ポインタは次のレコードの列1に移動します。 |
例 | 次のステートメントでは、ポインタを列23に移動させます。LENGTH変数の値として列23から26までを読み込みます。次に、ポインタを5列右に移動させ、WIDTH変数の値として列32から35までを読み込みます。input @23 length 4. +5 width 4.; |
例 | ポインタを後方(左)に移動する |
指定したnumeric-variableの値が示す列数だけポインタを移動させます。
範囲 | 正の整数、負の整数、または0 |
ヒント | numeric-variableの値が整数ではない場合、小数点以下の値を切り捨て、整数の値のみを使用します。numeric-variableの値が負の値の場合、ポインタを後方(左)へ移動させます。ただし、現在の列位置が1未満になる場合、ポインタは列1に移動します。値が0の場合、ポインタは移動しません。この値が入力バッファの長さを超える場合、ポインタは次のレコードの列1に移動します。 |
例 | ポインタを後方(左)に移動する |
指定したexpressionの値が示す列数だけポインタを移動させます。
範囲 | expressionの実行結果が、正の整数、負の整数または0になる式を指定します。 |
ヒント | expressionの実行結果が整数ではない場合、小数点以下の値を切り捨て、整数の値のみを使用します。expressionの実行結果が負の値の場合、ポインタを左に戻します。ただし、現在の列位置が1未満になる場合、ポインタは列1に移動します。値が0の場合、ポインタは移動しません。この値が入力バッファの長さを超える場合、ポインタは次のレコードの列1に移動します。 |
ポインタをレコードnに移動させます。
範囲 | 正の整数 |
操作 | INFILEステートメントのN=オプションの値によって、INPUTステートメントで読み込むレコード数や、DATAステップの繰り返しを終了した後の入力ポインタの位置は異なります。N=オプションの説明を参照してください。 |
例 | #2と指定されているので、ポインタは2番目のレコードに移動してから、変数IDの値として列3と4を読み込みます。input name $10. #2 id 3-4; |
指定したnumeric-variableの値が示すレコードにポインタを移動させます。
範囲 | 正の整数 |
ヒント | numeric-variableの値が整数ではない場合、小数点以下の値を切り捨て、整数の値のみを使用します。 |
指定したexpressionの値が示すレコードにポインタを移動させます。
範囲 | expressionの実行結果は正の整数でなければなりません。 |
ヒント | expressionの実行結果が整数ではない場合、小数点以下の値を切り捨て、整数の値のみを使用します。 |
ポインタを次の入力レコードの列1に移動させます。
例 | 最初の入力レコードから変数NAMEと変数AGEの値を読み込みます。次に、ポインタを2番目のレコードに移動し、変数IDの値として列3と4を読み込みます。input name age / id 3-4; |
無効なデータ値が検出されたときに、無効なデータに関するメッセージを出力しないようにします。
参照項目 | 無効なデータの処理方法 |
無効なデータ値が検出されたときに、メッセージと該当する入力行を出力しないようにします。この無効なオブザベーションに対しては、自動変数_ERROR_の値は1に設定されません。
参照項目 | 無効なデータの処理方法 |
input name $ 1-8 age 11-12;
----+----1----+----2----+ Peterson 21 Morgan 17
input name $ age;
----+----1----+----2----+ Peterson 21 Morgan 17
input name $char8. +2 income comma6.;
----+----1----+----2----+ Peterson 21,000 Morgan 17,132
input name= $ age=;
----+----1----+----2----+ name=Peterson age=21 name=Morgan age=17
input idno name $18. team $ 25-30 startwght endwght;
----+----1----+----2----+----3----+---- 023 David Shaw red 189 165 049 Amelia Serrano yellow 189 165
ポインタコントロール
|
相対指定
|
絶対指定
|
---|---|---|
カラムポインタコントロール
|
+n
|
@n
|
+numeric-variable
|
@numeric-variable
|
|
+(expression)
|
@(expression)
|
|
@'character-string'
|
||
@character-variable
|
||
@(character-expression)
|
||
行ポインタコントロール
|
/
|
#n
|
#numeric-variable
|
||
#(expression)
|
||
ラインホールド指定子
|
@
|
(なし)
|
@@
|
(なし)
|
input;
input;
input @;
----+----1----+----2----+----3 REGION1 49670 REGION2 97540 REGION3 86342
input region $ jansales;
----+----1----+----2----+----3 REGION1 49670 ↑
input region $ 1-7 jansales 12-16;
input region $7. +4 jansales 5.; input region $7. @12 jansales 5.;
----+----1----+----2----+----3 REGION1 49670 ↑
input @31 age 3. #3 id 3-4 #2 @6 name $20.;
input name $ 1-10 #2 age 13-14 #4;
input a / b #1 @52 c #2;
NOTE: SAS went to a new line when INPUT statement reached past the end of a line.
input x ?? 10-12;
input x ? 10-12; _error_=0;
INPUT array-name{*};
array x{100}; input x{*} 2.;
data club1;
input Idno Name $18.
Team $ 25-30 Startwght Endwght;
datalines;
023 David Shaw red 189 165
049 Amelia Serrano yellow 189 165
... more data lines ...
;
data _null_; infile file-specification-1; file file-specification-2; input; put _infile_; run;
----+----1----+----2----+ C HIST101 Watson S Williams 0459 S Flores 5423 C MATH202 Sen S Lee 7085
data schedule(drop=type); retain Course Professor; input type $1. @; if type='C' then input course $ professor $; else if type='S' then do; input Name $10. Id; output schedule; end; datalines; C HIST101 Watson S Williams 0459 S Flores 5423 C MATH202 Sen S Lee 7085 ; run; proc print; run;
data test; input name $ age @@; datalines; John 13 Monica 12 Sue 15 Stephen 10 Marc 22 Lily 17 ;
----+----1----+----2----+----3----+ 8 New York 1 USA 14 5 Cary 1 USA 2274 3 Chicago 1 USA 37 22 Tokyo 5 ASIA 80 5 Vancouver 2 CANADA 6 9 Milano 4 EUROPE 123
data office (drop=x);
infile file-specification;
input x @;
if 1<=x<=10 then
input @x City $9.;
else do;
put 'Invalid input at line ' _n_;
delete;
end;
run;
data office2;
set office;
infile file-specification;
array region {5} $ _temporary_
('USA' 'CANADA' 'SA' 'EUROPE' 'ASIA');
input @city Location : 2. @;
input @(trim(region{location})) Population : 4.;
run;
input @26 book $ @1 company;
m=-1; input x 1-10 +m y 2.;
input x 1-10 +(-1) y 2.;