在SAS脚本中,我有一个宏变量,稍后在PROC SQL步骤的SQL in
语句中使用。
%let my_list = (1,2,3);
proc sql;
select *
from my_table
where var1 in &my_list.
;
quit;
这很好用,但我需要一些灵活性,并希望能够选择所有行而不更改SQL代码本身,只需要宏变量。
是否有一个技巧来指定宏变量,因此它选择仍然使用IN运算符的所有行?(避免使用填充宏变量中所有可能值的子查询解决方案)
答案 0 :(得分:2)
您可以将代码更改为
%let where_clause = var1 in (1,2,3);
proc sql;
select *
from my_table
where &where_clause
;
quit;
并将宏变量更改为%let where_clause = 1=1;
以选择所有行。
%let where_clause = 1=1;
proc sql;
select *
from my_table
where &where_clause
;
quit;
OR ,如果您坚持要保持代码不变,您可以按如下方式更改宏变量,以使where子句始终为true:
%let my_list = (1) or 1=1;
proc sql;
select *
from my_table
where var1 in &my_list
;
quit;
(肮脏但完成工作)