我使用以下代码生成一个宏变量:
proc sql;
select count(*) into :Nobs
from table1;
select variable_list into :val1-:val%left(&Nobs)
from table1;
quit;
我现在想使用此变量列表来对特定数据集进行子集化。我可以使用单个宏变量执行此操作,如下所示:
data subset_data;
set original_data;
where variable = "&val1";
run;
我的问题是,在where条件下如何检查val数组中的所有值?
答案 0 :(得分:1)
您可能想要使用IN()运算符。宏变量的“数组”通常比它们的价值更多。而是仅将所有值存储到单个宏变量中。如果您的值是数字,请使用:
proc sql noprint;
select variable
into :value_list separated by ' '
from table1
;
quit;
data subset_data;
set original_data;
where variable in (&value_list);
run;
如果您的变量是字符变量,那么使用QUOTE()函数,以便生成带引号的字符串而不是数字。
select quote(trim(variable))
into :value_list separated by ' '
from table1
;