我有一个查询,我想在Proc SQL中通过SAS运行,我从我们的公司数据库中获取数据。在查询的顶部,为了便于使用,我希望能够输入一个输入变量列表。我有兴趣仅在某些日期和某些州获取数据。我关心的日期是连续的,所以我只为开始日期和结束日期创建一个SAS宏变量,并使用一个between语句。这很容易。但是,对于州,我不能做这样的事情。所以,我的想法是做像
这样的事情%LET States = ('CT', 'MD', 'ME', 'NC', 'WV');
然后,我想做一个where语句
WHERE (State_Tp IN &States)
现在,这不起作用。而且,我尝试了其他几种变体,但我似乎无法让它发挥作用。这样的事情可能吗?
答案 0 :(得分:2)
虽然你的代码很好,但是一个更好的解决方案(可能会有更少的问题)是创建一个具有所需状态的数据集,并加入它(或者如果更符合你的需要,使用exists子句) )。这更容易维护(因为您可以将数据集保持在与代码分开的易于编辑的格式中,例如在excel中),并且在某些情况下可能更快。
data states;
input state_tp $;
datalines;
CT
MD
ME
NC
WV
;;;;
run;
proc sql;
create table test as
select Z.*
from sashelp.zipcode Z
inner join
states s
on z.state_tp=s.state_tp;
quit;
或
proc sql;
create table test as
select * from sashelp.zipcode z
where exists (
select 1 from states s
where s.state_tp=z.state_tp);
quit;