次のようなマクロを使用してテーブルを動的に構築する SAS プログラムがあります。
%macro Projection;
%do i=1 %to &number_of_Years;
%Advance_Years;
proc sql;
create table Projection as
select *, Year_&previous_year.*(1+return) as Year_¤t_year.
from Projection;
quit;
%end;
%Mend Projection;
%Projection;
これは私のコードの簡略版です。%Advance_Years
マクロは基本的に進み¤t_year
、&previous_year
1年のマクロ。ご覧のとおり、このテーブルは 1 年に 1 つの変数を取得します。問題は、このテーブルの行数が数十万に達する可能性があり、実行時間が急上昇し、完了までに数時間に達することです。
私は試してみましoption compress=yes
たが、実行時間を短縮するのに役立ちましたが、それほど多くはありませんでした。実行を高速化するためのほとんどの SAS のヒントとコツを試しましたが、やはり大きな違いはありませんでした。32b で Base SAS 9.2 を実行しています。
変数を追加する手法について、私は間違った見方をしていると思います。ループごとにテーブルを上書きすると、実行効率に影響がありますか? はいの場合、これを可能な限り最も効率的なコードに書き直すにはどうすればよいですか? テーブルを「転置」して行を追加することはできないことに注意してください。前もって感謝します!