在特定库中具有多个变量的 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'));