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 公開