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

Using a SAS macro variable to select all values using the IN operator in PROC SQL

在 SAS 脚本中,我有一个宏变量,稍后在 PROC SQL 步骤的 SQL in 语句中使用。

%let my_list = (1,2,3);

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

这工作正常,但我需要一些灵活性,并且还希望能够 select 所有行而不更改 SQL 代码本身,而只是宏变量。

是否有指定宏变量的技巧,因此它select所有行仍然使用 IN 运算符?(避免填充所有可能值的子查询解决方案在宏变量中)

您可以将代码更改为

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

proc sql;
  select *
  from my_table
  where &where_clause
;
quit;

并将宏变量更改为%let where_clause = 1=1;以便select所有行。

%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;

(有点脏但能完成工作)