使用 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;
(有点脏但能完成工作)
在 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;
(有点脏但能完成工作)