使用SAS宏变量在PROC SQL中使用IN运算符选择所有值

使用SAS宏变量在PROC SQL中使用IN运算符选择所有值,sql,sas,proc-sql,Sql,Sas,Proc Sql,在SAS脚本中,我有一个宏变量,稍后在PROC SQL步骤中的SQLIn语句中使用 %let my_list = (1,2,3); proc sql; select * from my_table where var1 in &my_list. ; quit; 这很好,但我需要一些灵活性,还希望能够选择所有行而不更改SQL代码本身,而只更改宏变量 是否有技巧指定宏变量,使其选择仍使用IN运算符的所有行?(避免使用填充宏变量中所有可能值的子查询解决方案)您可以将代码更改为

在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运算符的所有行?(避免使用填充宏变量中所有可能值的子查询解决方案)

您可以将代码更改为

%let where_clause = var1 in (1,2,3);

proc sql;
  select *
  from my_table
  where &where_clause
;
quit;
并将宏变量更改为
%let,其中_子句=1=1以选择所有行

%let where_clause = 1=1;

proc sql;
  select *
  from my_table
  where &where_clause
;
quit;
,如果您坚持保持代码不变,只需按如下方式更改宏变量,即可使where子句始终为真:

%let my_list = (1) or 1=1;

proc sql;
  select *
  from my_table
  where var1 in &my_list
;
quit;

(肮脏但能完成任务)

好主意,直截了当。我一直过多地考虑程序化编程逻辑,比如R,而不是SAS的“查找和替换”宏方法。谢谢