前のページ|次のページ

OUTPUTステートメント

現在のオブザベーションをSASデータセットに書き込みます。

該当要素: DATAステップ
カテゴリ: アクション
種類: 実行

構文

OUTPUT <data-set-name(s)>;

引数なし

引数を指定せずにOUTPUTを使用すると、現在のオブザベーションがDATAステートメントに指定したすべてのデータセットに書き込まれます。
MODIFYステートメントが存在する場合、引数を指定せずにOUTPUTステートメントを使用すると、現在のオブザベーションがMODIFYステートメントに指定したデータセットの最後に書き込まれます。

引数

data-set-name

オブザベーションを書き込むデータセットの名前を指定します。

制限事項 OUTPUTステートメントに指定したすべての名前は、DATAステートメントにも指定する必要があります。
ヒント データセット名を使用するかわりに、オペレーティングシステムでサポートされている構文を使用してファイルの物理パス名を指定することができます。物理パス名は一重引用符または二重引用符で囲む必要があります。
OUTPUTステートメントには、DATAステップのDATAステートメントに指定したデータセット数と同じ数までデータセットを指定できます。

詳細

OUTPUTステートメントがオブザベーションを書き込むタイミングと場所

OUTPUTステートメントは、DATAステップの最後ではなく、現在のオブザベーションをすぐにSASデータセットに書き込みます。OUTPUTステートメントにデータセット名が指定されていない場合、DATAステートメントにリストされている1つまたは複数のデータセットにオブザベーションが書き込まれます。

暗示的なOUTPUTと明示的なOUTPUT

デフォルトでは、すべてのデータステップで繰り返しの最後に暗示的なOUTPUTステートメントが含まれ、作成中の1つまたは複数のデータセットにオブザベーションが書き込まれます。OUTPUTステートメントをDATAステップに明示的に指定すると、この自動出力より優先されるため、明示的なOUTPUTステートメントの実行時のみオブザベーションがデータセットに追加されるようになります。OUTPUTステートメントを使用して1つでもデータセットにオブザベーションを書き込むようにすると、DATAステップの最後に暗示的なOUTPUTステートメントは存在しなくなります。そのため、DATAステップでオブザベーションが書き込まれるのは、明示的なOUTPUTステートメントの実行時のみになります。OUTPUTステートメントはそれだけでも使用できますが、IF-THENステートメント、SELECTステートメント、DOループの処理と組み合わせても使用できます。

MODIFYステートメントを使用する場合

MODIFYステートメントをOUTPUTステートメントと組み合わせて使用する場合、REMOVEおよびREPLACEの各ステートメントは、DATAステップの繰り返しの最後の暗示的な書き込みアクションより優先されます。詳細については、比較を参照してください。特定のオブザベーションに対してOUTPUTステートメントとREPLACEまたはREMOVEステートメントの両方を実行する場合、オブザベーションのポインタの位置を正しく保つため、OUTPUTステートメントを最後に実行します。

比較

  • OUTPUTステートメントはオブザベーションをSASデータセットに書き込みますが、PUTステートメントは変数の値またはテキスト文字列を外部ファイルやSASログに書き込みます。
  • 指定した出力データセットにオブザベーションを書き込むタイミングを制御するには、OUTPUTステートメントを使用します。指定した出力データセットに書き込む変数を制御するには、DATAステートメントでKEEP=またはDROP=データセットオプションを使用するか、KEEPまたはDROPステートメントを使用します。
  • MODIFYステートメントと組み合わせてOUTPUTステートメントを使用する場合、次の規則が適用されます。
    • OUTPUT、REPLACE、REMOVEの各ステートメントの使用は、DATAステップの最後に実行されるデフォルトの書き込みアクションより優先されます。(OUTPUTがデフォルトのアクションです。ただし、MODIFYステートメントを使用するとREPLACEがデフォルトのアクションになります。)これらのステートメントのいずれかをDATAステップで使用する場合、データセットに新しいオブザベーションが追加されるように出力を明示的にプログラムする必要があります。
    • OUTPUT、REPLACE、REMOVEの各ステートメントは互いに独立して動作します。順序が論理的に正しければ、同じオブザベーションに複数のステートメントを適用できます。
    • 特定のオブザベーションに対してOUTPUTステートメントとREPLACEまたはREMOVEステートメントの両方を実行する場合、オブザベーションのポインタの位置を正しく保つため、OUTPUTステートメントを最後に実行します。

例1: OUTPUTステートメントの使用例

これらの例では、OUTPUTステートメントの使用方法を示します。
  • 次のコード行では、現在のオブザベーションがSASデータセットに書き込まれます。
       output;
  • 次のコード行では、指定した条件が真の場合に現在のオブザベーションがSASデータセットに書き込まれます。
       if deptcode gt 2000 then output;
  • 次のコード行では、PHONEの値が存在しない場合にオブザベーションがデータセットMARKUPに書き込まれます。
       if phone=. then output markup;

例2: 1つの入力行から複数のオブザベーションを作成する

入力データの1つの行から複数のオブザベーションを作成することができます。次のSASプログラムでは、データセットSULFA内の1つのオブザベーションから、データセットRESPONSE内に3つのオブザベーションが作成されます。
data response(drop=time1-time3);
   set sulfa;
   time=time1;
   output;
   time=time2;
   output;
   time=time3;
   output;
run;

例3: 1つの入力ファイルから複数のデータセットを作成する

1つの入力ファイルから複数のSASデータセットを作成できます。この例のOUTPUTステートメントは、2つのデータセットOZONEとOXIDESにオブザベーションを書き込みます。
data ozone oxides;
   infile file-specification;
   input city $ 1-15 date date9.
      chemical $ 26-27 ppm 29-30;
   if chemical='O3' then output ozone;
   else output oxides;
run;

例4: 複数の入力行から1つのオブザベーションを作成する

複数の入力オブザベーションを1つのオブザベーションにまとめることができます。この例のOUTPUTステートメントは、入力データセットにある最初の10個のオブザベーションのDEFECTS値を合計し、1つのオブザベーションを作成します。
data discards;
   set gadgets;
   drop defects;
   reps+1;
   if reps=1 then total=0;
   total+defects;
   if reps=10 then do;
      output;
      stop;
   end;
run;

関連項目:

前のページ|次のページ|ページの先頭へ