Sas 在特定库中具有多个变量的DS追加它们

Sas 在特定库中具有多个变量的DS追加它们,sas,sas-macro,Sas,Sas Macro,我上面的示例在特定库grp中的所有数据集中搜索varlist参数中的特定变量并将其追加。我有两个带所有变量的DS,但只选择了1DS中的值&不是frm DS 2&也给出了一个错误&未找到datalist符号引用…在创建宏之前,请注意没有宏时代码的外观 在这种情况下,它将是 %macro chk(lib=,varlist=); proc sql noprint; select distinct catx(".",libname,memname) into : datalist separated

我上面的示例在特定库grp中的所有数据集中搜索varlist参数中的特定变量并将其追加。我有两个带所有变量的DS,但只选择了1DS中的值&不是frm DS 2&也给出了一个错误&未找到datalist符号引用…

在创建宏之前,请注意没有宏时代码的外观

在这种情况下,它将是

%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);
只要你用引号和逗号传递你的参数,这就是你想要的

编辑:

Name in ("Name", "Age", "Sex");
您需要先将有效字符串传递给宏或在宏中处理它。您尚未指定是手动确定列表还是从某处提取列表。如果包含逗号,还需要屏蔽列表。基本上,您需要找到一种方法将字符串“name-age-sex”转换为“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;

您的代码没有执行您所声明的操作,即追加表或选择等于“AGE”的变量。请花点时间正确地阐述您的问题。不,它不会,如果您将代码复制到SAS中,它将不会按原样运行。首先,年龄需要用引号表示。不知道临时工是怎么回事。不管怎样,我在你的前一个问题中发布了一个答案。你看到我对你的另一个问题的评论了吗?查看IN运算符或使用or。如果a=1或a=2…我不理解你的评论。这个答案有什么问题?
%chk(lib=grp,varlist=%str('NAME', 'AGE', 'SEX'));