Select SAS 中 PROC SQL 的变量范围

Select range of variables with PROC SQL in SAS

我想 select 行基于一系列相似变量满足特定条件:

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;

有什么方法可以更有效地 select 变量?在 SAS 的 data step 中,我可以使用 proc1-proc3,但在 proc SQL 中不能这样做。

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

先写一个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 在元数据中始终为大写,而字段名称或混合大小写(但不区分大小写)。我添加了 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;