%macro chk(lib=,varlist=);
proc sql noprint;
select distinct catx(".",libname,memname) into : datalist separated by " "
from dictionary.columns
where libname = %upcase("&lib") and %upcase(&varlist) = upcase("&varlist");
quit;
data test1;
set &datalist;
run;
proc print data=work.test1;run;
%mend;
%chk(lib=ssp,varlist=name ID height);
上面的示例在特定库grp中的所有DataSet中搜索varlist参数中的特定变量并追加它们。我有2个带有所有变量的DS,但只选择了来自1 DS的值。不是DS 2&也会出错。 & datalist symbolic reference not found ....
答案 0 :(得分:0)
在制作宏之前,请注意没有宏的代码应该是什么样的。
在这种情况下,它将是
Name in ("Name", "Age", "Sex");
只要你通过引号和逗号传递你的参数,这就是你要找的东西。
编辑:
%macro chk(lib=,varlist=);
proc sql noprint;
select distinct catx(".",libname,memname) into : datalist separated by " "
from dictionary.columns
where %upcase(libname) = %upcase("&lib") and %upcase(name) in (&varlist);
quit;
***rest of code;
%mend;
您需要将有效字符串传递给宏或首先在宏中处理它。您尚未指定是手动确定列表还是从某个位置拉出列表。如果包含逗号,您还需要屏蔽列表。基本上,你要找到一种方法将字符串'name age sex'转换为'NAME','AGE','SEX'或简单地将其传递给该形式的宏。
%chk(lib=grp,varlist=%str('NAME', 'AGE', 'SEX'));