SAS宏变量表示Proc SQL中IN语句中的内容

时间:2013-08-12 19:24:22

标签: sql sas sas-macro

我有一个查询,我想在Proc SQL中通过SAS运行,我从我们的公司数据库中获取数据。在查询的顶部,为了便于使用,我希望能够输入一个输入变量列表。我有兴趣仅在某些日期和某些州获取数据。我关心的日期是连续的,所以我只为开始日期和结束日期创建一个SAS宏变量,并使用一个between语句。这很容易。但是,对于州,我不能做这样的事情。所以,我的想法是做像

这样的事情
%LET States = ('CT', 'MD', 'ME', 'NC', 'WV');

然后,我想做一个where语句

WHERE (State_Tp IN &States)

现在,这不起作用。而且,我尝试了其他几种变体,但我似乎无法让它发挥作用。这样的事情可能吗?

1 个答案:

答案 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;