マクロ実行時にデータセットの情報を取得する
[OS]ALL
[リリース] 6.12および6.09E以降
[キーワード] BASE MACRO FUNCTION %SYSFUNC
[質問]SASマクロ機能を使用するSASプログラムを、汎用的に利用したいと考えています。 そのため、マクロの実行時に、扱うSASデータセットの情報を動的に入手できるようにしたいのですが、可能でしょうか。
[回答]
SAS 6.12および6.09E以降で、マクロ関数%SYSFUNCが利用できます。また、SCL関数の一部がDATAステップ中で利用できるようになりました。この機能により、以下のようにマクロ定義中において任意のSASデータセットに存在するオブザベーション数、変数の数などを動的に取得することが可能です。
●マクロ定義例 %macro obsnvars(ds,nvarsp,nobsp); %global &nvarsp &nobsp; %let dsid = %sysfunc(open(&ds)); %if &dsid %then %do; %let &nobsp = %sysfunc(attrn(&dsid,NOBS)); %let &nvarsp = %sysfunc(attrn(&dsid,NVARS)); %let rc = %sysfunc(close(&dsid)); %put &ds は、&nvars 変数で &nobs オブザベーションです。; %end; %else %do; %put データセットのオープンに失敗しました。; %put %sysfunc(sysmsg()); %end; %mend obsnvars; ●実行例 data example; array a a1-a13; do i=1 to 8; output; end; run; %obsnvars(example,nvars,nobs); |