APPEND procedure

APPEND procedure は同一変数を持つ SAS データセットを縦方向に結合するためのプロシージャです。DATA step の SET statement でもよいですが、追加元のデータセットが空の場合はエラーが出てしまいます。


  proc datasets lib = work;
    delete base;
  data append;
    x = 1;
  data result;
    set base append;
  run;
  

  5   data result;
  6     set base append;
  ERROR: ファイル WORK.BASE.DATA は存在しません。
  7   run;
  

APPEND procedure では、追加元のデータセットが空の場合、追加したいデータセットのコピーを行ってくれます。従って、シミュレーションを行った際に、結果を一つのデータセットに縦積みしていく処理などに利用できます。以下では、利用例などについて説明していきます。

APPEND procedure の構文

APPEND procedure では、base オプションに追加元のデータセット、data オプションに追加したいデータセットを指定します。さらに、force オプションを入れた場合は、異なる変数が含まれていた場合にも強制的に結合します (追加元のデータセットに含まれない変数は削除される)。


  proc append base = base data = append force;
  run;
  

  1   proc append base = base data = append force;
  2   run;

  NOTE: WORK.APPEND を WORK.BASE に追加します。
  NOTE: BASE データセットが存在しません。 DATA ファイルを BASE ファイルにコピーします。
  

シミュレーション中での利用

一般的なシミュレーションでは条件を複数設定し、各条件下における性能を計算して求める処理を行うと思います。以下は APPEND procedure を用いてシミュレーション結果をまとめる例です。


  %macro dosim(base, condition1, condition2, condition3, seed);
  /*
    Simulations Code
  */
  data result;
    call streaminit(seed);
    performance = rand("Uniform");
  data append;
    condition1 = &condition1.;
    condition2 = &condition2.;
    condition3 = &condition3.;
    set result;
  proc append base = &base. data = append;
  run;
  %mend dosim;

  proc datasets lib = work;
    delete base;
  %dosim(base, 1, 1, 1, 469179);
  %dosim(base, 2, 1, 1, 607482);
  %dosim(base, 2, 2, 1, 556749);
  %dosim(base, 2, 2, 2, 044613);
  %dosim(base, 1, 2, 1, 198887);
  %dosim(base, 1, 2, 2, 585903);
  %dosim(base, 1, 1, 2, 194036);
  proc print data = base;
  run;
  

5–7 行目の data result; ... は、本来 Simulations Code 中で作られる結果の格納されたデータセットですが、今回は適当な値を生成して格納しています。
APPEND procedure を用いる事で、条件分岐や初期化の手間が減るため、スマートなコードが記述できるようになります。

実行結果は以下の様になります。


  condition1    condition2    condition3    performance

        1             1             1          0.70077
        2             1             1          0.15010
        2             2             1          0.25914
        2             2             2          0.93130
        1             2             1          0.36554
        1             2             2          0.86424
        1             1             2          0.98641
      

履歴

  • 2011/12/20 公開