DOWNLOADプロシジャで転送するオブザベーション数の上限を設定

[OS]ALL
[リリース] 6.07, 6.08, 6.09, 6.10
[キーワード] connect, download, observation, obs=, data, step, macro

[質問]

オブザベーション数が大きいSASデータセットをダウンロードすると時間がかかります。
転送するオブザベーション数の上限は設定できますか。

[回答]

DOWNLOADプロシジャで、OBS= データセットオプションを使う方法が考えられますが、この方法では OBS= に指定した数のオブザベーションがダウンロードされてしまいます。
設定した上限値を越えるオブザベーションを持つSASデータセットについてまったく転送したくないのであれば、リモートホスト側でオブザベーション数をチェックする必要があります。
次のマクロは、初めのDATAステップでSASデータセットのオブザベーション数を調べます。
そしてこの値と上限値を比較し、ダウンロードを行なうか、メッセージを発行します。

%macro download(data=,out=,max=);
    data _null_;
      set &data nobs=cnt;
      call symput('cnt',left(put(cnt,8.)));
      stop;
    run;
    %if &cnt <= &max   %then %do;
      proc download data=&data out=&out;
      run;
    %end;
    %else %put %str(上限値を越えました。);
  %mend;

次の例は、リモートホスト側のデータセット『K92』が10,000オブザベーション以上で あった場合、そのデータセットをダウンロードしません。

  data k92;
    set db2.stock92;
    if hi >= 12000;
  run;
  %download(data=k92,out=K92,max=10000)

このマクロをリモートホスト側のSASマクロ自動呼び出しライブラリへ登録しておくと、何度もマクロの定義をリモート実行することなく、使用することができます。