全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1223 3
2020-07-15
新人报道,请大家不吝赐教。谢谢。

有这样一段原始代码,目的是为了合并四个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 (&parameter1.!!memname) into:&parameter3. separated by " "
        from dictionary.columns
        where libname=&parameter2.
        ;
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);


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2020-7-16 02:24:22
A macro variable defined within a macro gets per default a scope of local. You need to use a %global statement here .
%macro datasetlist(parameter1=,parameter2=,parameter3=);
proc sql noprint;
       %global &parameter3;
        select distinct (&parameter1.!!memname) into:&parameter3. separated by " "
        from dictionary.columns
        where libname=&parameter2.
        ;
quit;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-7-16 02:37:48
A macro variable defined within a macro gets per default a scope of local. You need to use a %global statement to also use this macro variable outside of the macro.

%macro datasetlist(parameter1=,parameter2=,parameter3=);
proc sql noprint;
       %global &parameter3;
        select distinct (&parameter1.!!memname) into:&parameter3. separated by " "
        from dictionary.columns
        where libname=&parameter2.
        ;
quit;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-7-17 09:47:15
xiaopingN 发表于 2020-7-16 02:24
A macro variable defined within a macro gets per default a scope of local. You need to use a %global ...
问题得到解决。感谢您的帮助。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群