我想根据一系列满足某些条件的相似变量来选择行:
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
中完成。
答案 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;