我正在编写宏函数。如果满足某些条件,将创建一些表。我想将所有这些表附加到最后。有没有办法让该函数仅附加现有表?
我能想到的方法之一是让系统检查表是否存在,如果存在,则一个接一个地追加。 例如:
%if %sysfunc(exist(table1)) %then %do;
data final_table; set table1; run;
%end;
%if %sysfunc(exist(table2)) %then %do;
data final_table; set table2; run;
etc......
这将使代码真正冗长且无效。有什么办法解决这个问题?谢谢
答案 0 :(得分:2)
不要等到最后将它们结合起来。随时随地进行构建。
您可以使用PROC APPEND。如果BASE表不存在,它将创建它。否则,将附加观察结果。
proc append force base=final_table data=table&i;
run;
请注意,这将要求数据集具有相同的列。
答案 1 :(得分:2)
为表使用命名约定,并将它们存储在单个位置。 这就像使用一致的前缀一样简单,例如_TEMP_Table1,_temp_table2等。
然后在添加它们时,只需使用冒号运算符:
data want;
set _temp_table: ;
run;
仅包含以该前缀开头的表。
这也使以后将它们全部删除以清理您的过程变得更容易。
答案 2 :(得分:-1)
我想出了一个解决方案。如果有人想知道,我会在这里张贴。 我可以在运行任何这些表之前创建空表。当我附加所有中间表时,它们不存在,只会附加空表。
yyyyMMdd-HHmm_