【SAS/プログラミング】Output~いつだって登場するのに格好は気にするものさ

今回はoutputステートメントです。
あまり他のプログラムでも見ないと思われるSASのoutput事情について
取り扱っていきたいと思います。
タイトルはちょっとキザすぎましたかね、あまり気にしないでください笑

◎サンプルデータ(samp_data001)

画像1


1.隠れているoutputステートメント

/* sample code */

/* dt01データセット */
Data dt01;
 Set samp_data001;
Run;

/* dt02データセット */
Data dt02;
 Set samp_data001;
 Output;
Run;

実行結果として、dt01とdt02のデータセットは同じとなります。
サンプルデータセット(samp_data001)の内容でdt01、dt02にそれぞれコピーしたイメージです。
本来はoutputを入れることでデータの出力がされるのですが、
実はdt01の「run;」の前に隠れoutputがデフォルトで入っております。
実際作業で使用するのは、省略した形(dt01の方)で書きます。


2.outputステートメントを記述する時とは

では、いつoutputステートメントを記述する時があるのでしょうか。
以下の場合があります。


1.条件によって出力内容を変える場合

/* program 03 */
Data dt03;
 Set samp_data001;
  If type=1 then output;
Run;

<実行結果>

画像2


上記のとおり記載するとtype=1の条件にあった行のみ出力されます。
これで出力させたい行のみにできます。

2. 1つの行で複数行出力したい場合
構文(data ~ run;)の途中までの処理を出力したい場合などに使用します。

/* program 04 */
Data dt04;
 Set samp_data01;
  If type=1 then output;
  Score=99; output;
Run;

<実行結果>

画像3

上記のように記載すると、
まず"type=1"の条件にあった行はそのまま出力します。
その後、Scoreの値を「99」にした値を出力します。
つまり"type=1”の条件にある行は値を変えて複数出力されます。
なお"type=1"以外の行は、Scoreの値を「99」にして出力されます。
行が増えましたねー笑


3.注意点とまとめ

気をつけたい点として、outputを記載してしまうと、隠れているoutputは消えてしまいますので、ご注意を!
サンプル2プログラムのとおり、
『If type=1 then output;』とoutputを記載した場合、outputはここでの出力のみとなります。隠れているoutput以外でも記載しているoutputもよく確認して使いましょう!
いつだって見直し大事!!笑

いいなと思ったら応援しよう!