コロンモディファイアでデータセットオプションを使うと全部にかかる

今回の内容はあまり大したことない話です。
「:」を使った前方一致でデータセットを一括りに処理できるという話を以前しましたが

それに対して、括弧でin=とか keep=とかいわいるデータセットオプションを
つけたらどうなるのか考えたことがなかったので
実際やってみた話です。

data X_1;
do X=1 to 2;
 output;
end;
run;

data X_2;
do X=3 to 4;
 output;
end;
run;

data X_3;
do X=5 to 6;
 output;
end;
run;

data Y_1;
do Y=1 to 2;
 output;
end;
run;

data Y_2;
do Y=3 to 4;
 output;
end;
run;

のようにX_から始まるデータセットが3つ、Y_から始まるデータセットが2つあって
今、新規にAというデータセットを作成する場合、データがXから始まるデータセットから
読まれたものかYからかをフラグ変数を作って判別したいと思います。
導出元のデータセット名を直接取得する方法については次の投稿で紹介します

目的局面は


となります


その場合、以下で詰みなのです。

data A;
 set X_:(in=inx)
      Y_:(in=iny)
 ;
 FROMX=inx;
 FROMY=iny;
run;

これはつまり、データセットオプションが対象となるデータセット全てに分配されたイメージ
要は

data A;
 set X_1(in=inx)
      X_2(in=inx)
      X_3(in=inx)
      Y_1(in=iny)
      Y_2(in=iny)
 ;
 FROMX=inx;
 FROMY=iny;
run;

と同じになったいうわけです。

なので例えば、renameやwhereなんかも同様で

data B;
 set X_:(rename=(X=_X) where=(_X>2));
run;

なら結果は


となります。



0 件のコメント:

コメントを投稿