在SAS中使用PROC SQL选择变量范围

时间:2019-03-14 15:06:36

标签: sql sas proc

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

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中完成。

1 个答案:

答案 0 :(得分:3)

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

首先编写一条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;