【问题标题】:Using a SAS macro variable to select all values using the IN operator in PROC SQL使用 SAS 宏变量在 PROC SQL 中使用 IN 运算符选择所有值
【发布时间】:2023-03-28 03:01:01
【问题描述】:

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

【问题讨论】:

    标签: sql sas proc-sql


    【解决方案1】:

    您可以将代码更改为

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

    ,如果您坚持保持代码不变,您可以简单地更改宏变量,如下所示,以便您的 where 子句始终为真:

    %let my_list = (1) or 1=1;
    
    proc sql;
      select *
      from my_table
      where var1 in &my_list
    ;
    quit;
    

    (脏但能完成工作)

    【讨论】:

    • 不错的直截了当的想法。我一直在考虑 R 中的过程编程逻辑,而不是 SAS“查找和替换”宏方法。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2017-10-04
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多