複数の外部ファイルにデータを書き出す方法

[OS]ALL
[リリース] 6.07以降
[キーワード] base, datastep, file, filevar=, put, header=, by, retain, first

[質問]

SASデータセットから条件に従って複数の外部ファイルにデータを書き出す方法を教えてください。

[回答]

SAS 6.04までは書き出すファイルごとに何度もFILEステートメントを記述しなければなりませんでしたが、SAS 6.06からはFILEVAR=オプションを指定することにより、FILEステートメントを一度指定するだけで複数の外部ファイルにデータを書き出すことができるようになりました。
以下のプログラム例では月別のファイルに車種ごとの売り上げと合計を書き出します。

proc sort data=sales;
    by month car;
  run;
  data _null_;
    set sales;
    by month car;
    retain selfile;
    if first.month then do; /* 変数month(月)がブレークした時に */
      totsale=0;            /* 小計・合計をクリアし、出力先の */
      carsale=0;            /* ファイル名を変数selfileにセットする */
      selfile= 'mon'||put(month,$char2.)||'.txt';
    end;
    totsale+kingaku; carsale+kingaku;
    file dummy print notitle filevar=selfile header=head;
    if last.car   then put @5 car 
                           @20 carsale yen10.;
    if last.month then put @18 '------------' /
                           @19 totsale comma10. @33 '支店合計';
    return;
    head:
      put @15 month '月  売り上げ' //
          @5 '車  名' @20 '合  計' /;
    return;
  run;
なおINFILEステートメントでもFILEVAR=オプションが使えます。
したがって、条件に応じて複数の外部ファイルからデータを読み込むアプリケーションも作成できます。

[参考]

  • 「SAS Communications Second Quarter 1994」