【问题标题】:Select range of variables with PROC SQL in SAS在 SAS 中使用 PROC SQL 选择变量范围
【发布时间】:2019-03-14 15:06:35
【问题描述】:

我想根据一系列相似变量满足特定条件来选择行:

proc sql;
  create table2 as
  select * from table1 
  where proc1 in ('111', '222', '333') or
        proc2 in ('111', '222', '333') or
        proc3 in ('111', '222', '333');
quit;

有没有一种方法可以更有效地选择变量?在 SAS 的data step 中,我可以使用proc1-proc3,但这不能在proc SQL 中完成。

【问题讨论】:

  • 您可能需要查看 Dynamic Query。在使用该参数时,您可以构建 WHERE 条件。否则您无法选择要检查的字段

标签: sql sas proc


【解决方案1】:

不可能完全做到这一点,但有一些选项可能适合您。

先写一条sql语句,将这些条件写入一个宏变量proc_conditions

proc sql;
  select compbl(name ||' in ('111', '222', '333')')
  into : proc_conditions separated by ' or '
  from sasHelp.vcolumn
  where libName = 'WORK'
    and memName = 'TABLE2'
    and upcase(Name) like 'PROC%'
  ;

请注意,libName 和 memName 在元数据中总是大写,而字段 Name 或混合大小写(但不区分大小写)。我添加了Compbl 以将多个空格减少为单数,但这不是必需的。

您可以通过将结果写入日志来检查结果是否为proc1 in ('111', '222', '333') or proc2 in ('111', '222', '333') or proc3 in ('111', '222', '333')

  %put &proc_conditions;

那就用吧

  create table2 as
  select * from table1 
  where &proc_conditions;
quit;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2017-10-04
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    相关资源
    最近更新 更多