|
|
マクロ実行時にデータセットの情報を取得する
[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);
|
|||||