以前、
「SASデータセットのオブザベーション数をマクロ変数に格納する方法_call symput とsql select into: ①単純な1マクロ変数の作成」
や
「【訂正追補】SASデータセットのオブザベーション数をマクロ変数に格納する方法_call symput」
でオブザベーション数をマクロ変数にいれる話をしました。
最近、リンクさせていただいたブログ「SAS Utility」の中で、全く別のアプローチでオブザベーション数を取得していて、感動しました。
記事タイトル「マクロ %nobs」
SCL関数をマクロに組み込んでいるわけですね。
そういえば、同じくリンクブログの「僕の頁 <SASと臨床試験と雑談と>徒然なるままにSAS暮らし」で
「fetchobs関数」の紹介をされていました
これもそっち系の技術ですね。
なんか、感覚的にfetchobs関数の処理ってハッシュオブジェクトの処理と似てません?面白いです。
実は僕はSCLの類はさっぱりで、定型文を呪文的に使うことがあるぐらいだったので、今から勉強していきたいと思います。
例えば
data Q1(label='データセットラベル');
X=1;Y=2;Z=3;output;
X=1;Y=2;Z=3;output;
X=1;Y=2;Z=3;output;
X=1;Y=2;Z=3;output;
run;
data Q2;
A=1;B=2;output;
A=1;B=2;output;
run;
ここで、この2つのデータセットの変数の数、オブザベーション数、データセットについているラベル
帰属するライブラリ名を取得することを考えます。
data A1;
DSID=open('Q1');
VARN=attrn(dsid,"NVARS");
OBS=attrn(dsid,"NOBS");
DSLABEL=attrc(dsid,'LABEL');
LIB=attrc(dsid,'LIB');
output;
DSID=open('Q2');
VARN=attrn(dsid,"NVARS");
OBS=attrn(dsid,"NOBS");
DSLABEL=attrc(dsid,'LABEL');
LIB=attrc(dsid,'LIB');
output;
run;
open関数を使ってデータセット名を指定するとそのデータセットがオープン状態になって操作するための固有IDみたいなんがとれるってことですよね?そしたらそれを第一引数として、戻り値が数字になるような属性をとる場合はATTRN関数、文字の場合はATTRC関数で、第二引数に欲しいパラメータを指定するわけですね。
なるほど、なるほど、通常のデータステップで使用する場合は、ステップ終了時にオープン状態が自動解除されるので、特に気にしなくていいけど、マクロ内で%sysfuncで実行する場合は、オープンのままになってしまうから、close関数を使うわけですね。
ちょっとずつわかってきました。
0 件のコメント:
コメントを投稿