使用SAS宏变量在PROC SQL

时间:2017-08-02 12:04:03

标签: sql sas 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;

这很好用,但我需要一些灵活性,并希望能够选择所有行而不更改SQL代码本身,只需要宏变量。

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

1 个答案:

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

(肮脏但完成工作)