在特定库中包含多个变量的DS会附加

时间:2016-10-05 11:30:25

标签: sas sas-macro

%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 ....

1 个答案:

答案 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'));