SASデータセットに関する情報(OBS数、変数の数等)を取得する

[OS]ALL
[リリース] 6.07以降
[キーワード] base, datastep, contents, dataset, observation, variable, count, informations, set, statement, nobs=, option, out=, macro

[質問]

特定のSASデータセットのオブザベーション数や変数の数を、プログラム中で取得したいのですが、よい方法はありますか。

[回答]

いくつかの方法が考えられます。
まず、オブザベーション数を取得するだけなら、SETステートメントのNOBS=オプションを使用する方法があります。 また、CONTENTSプロシジャでOUT=オプションを使用すると、オブザベーション数だけでなく、SASデータセットに関する非常に多くの情報を任意のSASデータセットに出力することができます。

proc contents data=sasuser.class out=contout;
run;

proc print data=contout;
run;
またマクロを利用すれば、上記で作成したSASデータセットから、オブザベーション数と 変数の数を取得するまでを自動的に行えます。
以下にその方法を示します。

[マクロ定義]

  %macro varcnt(data=,mvar=);
    %global &mvar;
    proc contents data=&data
                  out=_tmpxx_ noprint;
    run;
    data _null_ ;
      set _tmpxx_ nobs=cnt;
      call symput("&mvar",left(put(cnt,8.)));
      stop;
    run;
  %mend;
  %macro obscnt(data=,mvar=);
    %global &mvar;
    data _null_;
      set &data nobs=cnt;
      call symput("&mvar",left(put(cnt,8.)));
      stop;
    run;
  %mend;

[使用例]

  %varcnt(data=sasuser.class,mvar=test);
  %put &test;
  %obscnt(data=sasuser.class,mvar=test);
  %put &test;