以前、「ODS OUTPUTからデータセットを作る場合に複数変数を指定したプロシジャ出力の場合に(MATCH_ALL)で変数ごとにデータセットを自動連番で分けてもらう」という記事で
http://sas-tumesas.blogspot.jp/2014/02/ods-outputmatchall.html
ods outputの出力データセットを複数にわけるという話をしましたが、それに補足です。
data Q1;
X=1;Y=3;output;
X=4;Y=3;output;
X=6;Y=5;output;
run;
ods listing close;
ods output basicmeasures(match_all=MA)=AA;
proc univariate data=Q1;
var X Y;
run;
ods output close;
ods listing;
とmatch_allの後に=で任意の名前を指定すると、作成されたデータセット名がマクロ変数に格納されます。
実行後、
%put 作成されたのは &MA;
とすると
となります。
data OUTPUT;
set &MA;
run;
とすると、作成されたデータセットが対象となって縦連結されます。
じゃあなんでmatch_allつけて分けたの?って感じですが。
前回の記事では複数変数を指定したらという話でしたが
例えば
proc sort data=Q1;
by X;
run;
ods listing close;
ods output basicmeasures(match_all=MB)=BB;
proc univariate data=Q1;
var Y;
by X;
run;
ods output close;
ods listing;
のようにby変数ごとに結果のデータセットを作成した場合でも
%put 作成されたのは &MB;
とすると
となります。
作成されたデータセットに、マクロループなんかで同一の処理をかけたい場合に
役立ちます。
まあ今まで一度もそんな状況はなかったけど。
0 件のコメント:
コメントを投稿