以前、「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;
とすると
となります。
作成されたデータセットに、マクロループなんかで同一の処理をかけたい場合に
役立ちます。
まあ今まで一度もそんな状況はなかったけど。
ODS OUTPUTからデータセットを作る場合に複数変数を指定したプロシジャ出力の場合に(MATCH_ALL)で変数ごとにデータセットを自動連番で分けてもらう
前の投稿に引き続きODS OUTPUTでデータセットを作る話ですが、前回の(PERSIST=PROC)と違って、今回(MATCH_ALL)については、僕はまだ実戦で使ったことはなくて、あんまりいい使いどころも見つけていません。
例えば、
data Q1;
X=1;Y=3;output;
X=4;Y=3;output;
X=6;Y=5;output;
run;
といったデータセットがあった場合
ods listing close;
ods output basicmeasures=A0;
proc univariate data=Q1;
var X Y;
run;
ods output close;
ods listing;
実戦で使ったことないのに、なんで自分はこの書き方知ってるんだろうと思って調べてみたら
2013年のSAS GLOBAL Forumの投稿で
「OUT= is on the way out. Use ODS OUTPUT instead」というPaperがあって、そこの中でのネタでした。
例えば、
data Q1;
X=1;Y=3;output;
X=4;Y=3;output;
X=6;Y=5;output;
run;
といったデータセットがあった場合
ods listing close;
ods output basicmeasures=A0;
proc univariate data=Q1;
var X Y;
run;
ods output close;
ods listing;
とするとvarで2変数指定していますが1プロシージャの出力なので、A0の中身は当然
XとYの要約統計量が両方入ります。
しかし、今度は、1変数ずつ、データセットを分けたいけど、複数回proc univariateは書きたくないなという願望があったとします。
その場合、
ods listing close;
ods output basicmeasures(MATCH_ALL)=AA;
proc univariate data=Q1;
var X Y;
run;
ods output close;
ods listing;
とすると
データセットAAと、AA1という2つのデータセットが作成され
それぞれにXとYの結果が入ります。
指定した変数の数だけ、勝手に末尾に自動連番して、データセットを作成してくれます。
実戦で使ったことないのに、なんで自分はこの書き方知ってるんだろうと思って調べてみたら
2013年のSAS GLOBAL Forumの投稿で
「OUT= is on the way out. Use ODS OUTPUT instead」というPaperがあって、そこの中でのネタでした。
on the way out.、 「(1) なくなりかけて, すたれかけて.」
なかなか、きついこといいますね。面白いです。
登録:
コメント (Atom)



