在特定库中具有多个变量的 DS 追加它们
DS having multiple variable in a specific library append them
%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 的所有数据集中的 varlist 参数中搜索特定变量并附加它们。我有 2 个包含所有变量的 DS,但只选择了 1 个 DS 的值而不是 frm DS 2 并且也给出了错误。未找到 &datalist 符号引用....
在制作宏之前,请注意您的代码在没有宏的情况下应该是什么样子。
在这种情况下,它将是
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'));
%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 的所有数据集中的 varlist 参数中搜索特定变量并附加它们。我有 2 个包含所有变量的 DS,但只选择了 1 个 DS 的值而不是 frm DS 2 并且也给出了错误。未找到 &datalist 符号引用....
在制作宏之前,请注意您的代码在没有宏的情况下应该是什么样子。
在这种情况下,它将是
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'));