Macros 宏调用数据集并连接它
我知道如何从文件夹中调用不同的表。这是通过Macros 宏调用数据集并连接它,macros,sas,concatenation,Macros,Sas,Concatenation,我知道如何从文件夹中调用不同的表。这是通过函数:%let x1=libname.foldername完成的。我的问题是如何用一个简单的宏在1000个表上执行它 SAS 我会避免将数据从数据集移动到宏变量中 首先要尝试的是不要使用宏编码。尝试只使用数据集列表。如果可以找到所需数据集的一个或多个常用前缀 data project.TABLE_FINALE; set project.TABLE_20: ; run; 如果确实想将列表放入宏变量中,那么概念上更清晰,如果只将列表放入单个宏变量中,
函数:%let x1=libname.foldername
完成的。我的问题是如何用一个简单的宏在1000个表上执行它
SAS
我会避免将数据从数据集移动到宏变量中 首先要尝试的是不要使用宏编码。尝试只使用数据集列表。如果可以找到所需数据集的一个或多个常用前缀
data project.TABLE_FINALE;
set project.TABLE_20: ;
run;
如果确实想将列表放入宏变量中,那么概念上更清晰,如果只将列表放入单个宏变量中,编码也更容易
proc sql noprint;
select dsname into :dslist separated by ' '
from mylist;
quit;
data project.TABLE_FINALE;
set &dslist;
run;
但如果您真的有1000个数据集,那么这可能太多,无法放入单个宏变量中(限制为65K个字符)
您也可以从数据生成代码,而不是使用宏生成代码。这样就不需要将任何数据移动到宏变量中。例如,您可以使用callexecute()
proc sql noprint;
select dsname into :dslist separated by ' '
from mylist;
quit;
data project.TABLE_FINALE;
set &dslist;
run;
data _null_;
set mylist end=eof;
if _n_=1 then call execute('data project.TABLE_FINALE; set');
call execute(' '||trim(dsname));
if eof then call execute(';run;');
run;