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

问题描述 投票:1回答:1

我想根据一系列类似变量选择符合某些条件的行:

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

sql sas proc
1个回答
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在元数据中始终为大写,而字段名称或混合大小写(但不区分大小写)。我添加了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;
© www.soinside.com 2019 - 2024. All rights reserved.