前のページ|次のページ

INPUTステートメント、名前付き

変数名と等号の後ろに続くデータ値を読み込み、読み込んだ値を対応するSAS変数に割り当てます。

該当要素: DATAステップ
カテゴリ: ファイル操作
種類: 実行

構文

INPUT <pointer-control> variable= <$> <@ | @@>;

引数

pointer-control

入力バッファ内の指定した行または列に入力ポインタを移動させます。

参照項目 カラムポインタコントロール and 行ポインタコントロール

variable=

INPUTステートメントで値を読み込む変数名を指定します。入力データレコードでは、次の形式でフィールドを記述します。

variable=value
名前付き入力と他の入力スタイルを使用する

$

変数の値を数値ではなく文字値として格納するように指定します。

ヒント この変数が文字変数と事前に定義されている場合、$を指定する必要はありません。
名前付き入力と他の入力スタイルを使用する

informat.

入力形式を指定します。入力形式は、入力値の読み込み方法ではなく、入力値のデータの種類を示します。

ヒント 変数に入力形式を関連付けるには、INFORMATステートメントを使用します。
参照項目 SAS出力形式と入力形式: リファレンスのSAS入力形式
名前付き入力と他の入力スタイルを使用する

start-column

INPUTステートメントで変数の入力データレコードの走査を開始する列位置を指定します。変数名が始まる列位置でなくてもかまいません。

-end-column

変数のデフォルトの長さを指定します。

.decimals

入力値に小数点が明示的に含まれていない場合、小数点以下の桁数を指定します。

ヒント 入力値に小数点が明示的に含まれている場合、INPUTステートメントで指定した小数点以下の桁数より優先されます。

@

次のINPUTステートメントの実行時に使用できるように入力行を保持します。DATAステップの同一の反復内で保持されます。このラインホールド指定子は、後置@と呼ばれます。

制限事項 後置@は、INPUTステートメントの最後の項目として指定する必要があります。
ヒント 後置@を指定すると、次のINPUTステートメントによって、現在の入力レコードの開放や入力バッファへの次のレコードの読み込みが自動的に実行されなくなります。後置@は、同じレコードを何度も読み込む必要がある場合に便利です。
参照項目 ラインホールド指定子の使用

@@

次のINPUTステートメントの実行時に使用できるように入力行を保持します。DATAステップの反復間を通して保持されます。このラインホールド指定子は、後置@@と呼ばれます。

制限事項 後置@@は、INPUTステートメントの最後の項目として指定する必要があります。
ヒント 後置@@は、入力行に複数のオブザベーションの値が含まれる場合に便利です。
参照項目 ラインホールド指定子の使用

詳細

名前付き入力の使用が求められる場合

名前付き入力では、変数名と等号の後ろに変数の値が続く入力データレコードを読み込みます。INPUTステートメントでは、入力ポインタの現在位置にある入力データレコードを読み込みます。入力データレコードの先頭にINPUTステートメントの名前付き入力では読み込めないデータ値が含まれる場合、他の入力スタイルを指定してそのデータ値を読み込むようにしてください。ただし、いったんINPUTステートメントで名前付き入力での読み込みを開始した場合は、残りのすべての値をこの形式で読み込む必要があります。 名前付き入力と他の入力スタイルを使用するを参照してください。
INPUTステートメントの変数は、データレコードに値が表示されるのと同じ順序で指定する必要はありません。また、レコードに含まれる各フィールドに対して変数を指定する必要もありません。ただし、他のステートメント(ATTRIB、FORMAT、INFORMAT、LENGTHなどのステートメント)で使用する変数をINPUTステートメントに指定していなくても、入力データにその値が含まれる場合は、INPUTステートメントによって値が自動的に読み込まれます。その場合、変数が初期化されていないことを示すメッセージがログに出力されます。
名前付き入力のすべてのデータ値に変数を指定しな場合、自動変数_ERROR_の値が1に設定され、メッセージがログに出力されます。次に例を示します。
data list;
   input name=$ age=;
   datalines;
name=John age=34  gender=M
;
ログに出力されるメッセージには、GENDERが定義されていないので自動変数_ERROR_の値が1に設定されたことが示されます。

制限事項

  • 名前付き入力で読み込みを開始した後に、他の入力スタイルに切り替えたり、ポインタコントロールを使用することはできません。入力データレコードに含まれる残りの値はすべて、variable=valueの形式で記述されている必要があります。名前付き入力の形式で記述されていない値は、無効なデータとして扱われます。
  • 現在の入力行の後にも名前付き入力の値が続く場合、入力行の最後にスラッシュ(/)を使用します。スラッシュを指定すると、ポインタを次の行に移動させてから名前付き入力による読み込みを続けます。次に例を示します。
    input name=$ age=;
    ここでは、次の入力データレコードが読み込まれます。
    name=John /
       age=34
  • ブランクが中に含まれる文字値の読み込みに名前付き入力を使用する場合、リスト入力と同じように、データ値の前後にブランクを2つ追加します。 値にブランクが含まれる文字変数を読み込むを参照してください。
  • アスタリスクや式のsubscriptを使用した配列参照はできません。

例1: リスト入力と名前付き入力を使用する

次のDATAステップでは、リスト入力と名前付き入力を使用して、入力データレコードを読み込みます。
data list;
   length name $ 20 gender $ 1;
   informat dob ddmmyy8.;
   input id name= gender= age= dob=;
   datalines;
4798 name=COLIN gender=m age=23 dob=16/02/75
2653 name=MICHELE gender=f age=46 dob=17/02/73
;
proc print data=list; run;
このINPUTステートメントでは、ID変数の値をリスト入力で読み込みます。残りの変数であるNAME、GENDER、AGE、DOBの値は名前付き入力で読み込みます。また、INPUTステートメントで読み込む変数NAMEの文字値が8文字で切り捨てられないように、LENGTHステートメントを指定しています。

例2: 名前付き入力で変数を任意の順序で使用する

このDATAステップでも、前述の例と同じデータを使用し、リスト入力と名前付き入力で入力データレコードを読み込みます。ただし、この例では、最初に読み込むIDの値を除き、読み込む2行のデータでの値の順序は異なります。
data list;
   length name $ 20 gender $ 1;
   informat dob ddmmyy8.;
   input id dob= name= age= gender=;
   datalines;
4798 gender=m name=COLIN age=23 dob=16/02/75
2653 name=MICHELE dob=17/02/73 age=46 gender=f
;
proc print data=list; run;

例3: 名前付き入力と他の入力スタイルを使用する

次のDATAステップでは、リスト入力と名前付き入力を使用して入力データレコードを読み込みます。
data list;
   input id name=$20. gender=$;
   informat dob ddmmyy8.;
   datalines;
4798  gender=m name=COLIN age=23 dob=16/02/75
2653 name=MICHELE age=46 gender=f
;
proc print data=list; run;
このINPUTステートメントでは、最初の変数IDの値をリスト入力で読み込みます。残りの変数であるNAME、GENDER、DOBの値は名前付き入力で読み込みます。これら変数の値は、データレコードにある順序で読み込まれるわけではありません。NAME=に$20.と入力形式を指定しているので、INPUTステートメントでの読み込み時に文字値が8文字で切り捨てられることはありません。INFORMATステートメントで変数DOBを参照するように指定されているので、INPUTステートメントでDOB=フィールドの値を読み込みます。AGE=フィールドの値の読み込みはすべてスキップされます。DOBが初期化されていないこと、AGEが定義されていないこと、自動変数_ERROR_が1に設定されたことを示すメッセージがSASログに出力されます。

例4: 値にブランクが含まれる文字変数を読み込む

次のDATAステップでは、値にブランクが含まれる文字変数を名前付き入力で読み込みます。
data list2;
   informat header $30. name $15.;
   input header= name=;
   datalines;
header=  age=60 AND UP  name=PHILIP
;
変数HEADERの値であるage=60 AND UPの前後には、2個のスペースが挿入されています。このフィールドには、等号も含まれています。

関連項目:

ステートメント:
前のページ|次のページ|ページの先頭へ