「:」を使った前方一致でデータセットを一括りに処理できるという話を以前しましたが
それに対して、括弧で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 件のコメント:
コメントを投稿