0

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

%LET States = ('CT', 'MD', 'ME', 'NC', 'WV');

然后稍后,我想做一个 where 语句

WHERE (State_Tp IN &States)

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

4

1 回答 1

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;
于 2013-08-12T20:06:42.797 回答