新人报道,请大家不吝赐教。谢谢。
有这样一段原始代码,目的是为了合并四个library下所有的数据集(这四个library里,每天生成一个当天日期命名的数据集)至四个summay的数据集。
前面这四段proc sql形式上特别一致,想把他们合并为一个宏来处理。预想的代码如下,但是运行不成功。查看日志,报错出在parameter3=list1这里,于是用%put &list1.;来查看输出的参数list1,输出的是&list1 并不是想象中的RMAX_D.A14JUL20 RMAX_D.A15JUL20....这样后面的合并动作就不能完成。
现在自己没找到解决办法,请各位帮忙。
*****************************************************************
原始代码:
proc sql noprint;
select distinct ("RMAX_D."!!memname) into:list1 separated by " "
from dictionary.columns
where libname="RMAX_D"
;
quit;
proc sql noprint;
select distinct ("TMR_D."!!memname) into:list2 separated by ' '
from dictionary.columns
where libname="TMR_D"
;
quit;
proc sql noprint;
select distinct ("RMAXSR_D."!!memname) into:list3 separated by ' '
from dictionary.columns
where libname="RMAXSR_D"
;
quit;
proc sql noprint;
select distinct ("TMRSRV_D."!!memname) into:list4 separated by ' '
from dictionary.columns
where libname="TMRSRV_D"
;
quit;
/*Create macro*/
%macro forchart(ds=,final=);
/*Combine dataset to work library*/
data work.&final.;
set &ds.;
run;
%mend forchart;
/*Execute macro*/
%forchart(ds=&list1.,final=rmax_summary);
%forchart(ds=&list2.,final=tmr_summary);
%forchart(ds=&list3.,final=RMAXSR_summary);
%forchart(ds=&list4.,final=tmrsrv_summary);
***************************************************************************
预想的方法:
%macro datasetlist(parameter1=,parameter2=,parameter3=);
proc sql noprint;
select distinct (¶meter1.!!memname) into:¶meter3. separated by " "
from dictionary.columns
where libname=¶meter2.
;
quit;
%mend datasetlist;
%datasetlist(parameter1="RMAX_D.",parameter2="RMAX_D",parameter3=list1);
%datasetlist(parameter1="TMR_D.",parameter2="TMR_D",parameter3=list2);
%datasetlist(parameter1="RMAXSR_D.",parameter2="RMAXSR_D",parameter3=list3);
%datasetlist(parameter1="tmrsrv_D.",parameter2="tmrsrv_D",parameter3=list4);