2016年3月1日火曜日

1つのデータステップで、複数のデータセットを作成する方法。




以下を実行すると、、

data  DT1 DT2 DT3;
    set  SASHELP.CLASS;
run;

データセットSASHELP.CLASSをセットしたデータセットDT1, DT2, DT3をいっぺんに作ることが出来ます。



また、以下のように書くことも出来ます。

data  DT1 DT2 DT3;
     set  SASHELP.CLASS;
     if  AGE=13 then  output DT1;
     if  AGE=15 then  output DT2;
     output DT3;
run;

・ AGE=13のオブザベーションをDT1に出力
・ AGE=15のオブザベーションをDT2に出力
・ 条件なしでオブザベーションをDT3に出力


注意:データステップ中にOUTPUTステートメントとMODIFYステートメントを併用していない前提となります無限ループになったり挙動が変わることがあるので・・)



注意点


たとえば、以下の赤文字の処理、変数FLAGがDT1とDT2に作成されますが、、

data DT1 DT2;
    set SASHELP.CLASS;
    if AGE=13 then output DT1;
    if AGE=15 then output DT2;
    if AGE=13 then FLAG=1;     ***  × この書き方はダメ ******;
run;

DT1には「AGE=13」のオブザベーションがありますが、「FLAG=1」が反映されません。

暗黙のOUTPUTステートメント」 を見ていただくと原因が分かります。



というわけで、OUTPUTの前に移動してやります。

data DT1 DT2 DT3;
   set SASHELP.CLASS;
   if AGE=13 then FLAG=1;
   if AGE=13 then output DT1;
   if AGE=15 then output DT2;
run;


0 件のコメント:

コメントを投稿