我有一个 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
宏观基本推进1年¤t_year
宏观&previous_year
。如您所见,此表每年获取 1 个变量。问题是该表的行数可以达到数十万,而且我已经看到执行时间猛增,达到数小时才能完成。
我试过option compress=yes
了,它有助于减少执行时间,但不是很多。我已经尝试了大多数 SAS 提示和技巧来加快执行速度,但同样,差别不大。我在 32b 上运行 Base SAS 9.2。
我认为我对变量添加技术的看法是错误的。我在每个循环上覆盖我的表这一事实是否会影响执行效率?如果是的话,我怎么能把它改写成最有效的代码呢?请记住,我不能“转置”表格而只能添加更多行。提前致谢!