使用Proc sql

时间:2015-09-08 08:29:28

标签: sas

我使用以下代码生成一个宏变量:

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数组中的所有值?

1 个答案:

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