我有两个代码,一个proc sql和另一个proc和datastep。两者都是相互关联的数据集。
下面是proc sql行。
create table new as select a.id,a.alid,b.pdate from tb a inner join
tb1 act on a.aid =act.aid left join tb2 as b on (r.alid=a.alid) where
a.did in (15,45); quit;
以下是从上面的datatset new创建的proc和datasteps。
proc sort data = new uodupkey;
by alid;
data new1;
set new;
format ddate date9.
dat1=datepart(today);
datno=input(number,20.);
key=_n_;
rename alid blid;
run;
proc sort data=new1 nodupkey;
by datno dat1;
run;
我需要将所有内容放入单个proc sql步骤。
答案 0 :(得分:-1)
你提到了两个数据步骤,但我只看到一个。
无论如何,您的数据步骤和proc排序确实可以写在一个SQL查询中(然后您可以在proc sql
中插入):
proc sql;
create table new1 as
select id
,alid as blid
,pdate
,datepart(today) as dat1
,input(number,20.) as datno
,monotonic() as key
from new1
group by datno, dat1
having key=min(key)
;
quit;
但有一句话。您的数据步骤需要输入数据集ddate
中名为today
,number
和new
的变量。如果该数据集应该是您的第一个SQL查询的结果,那么这些变量就不存在了,它们的值以及dat1
中的datno
和new1
的值将始终存在失踪。
另外,我假设您nodupkey
上拼错了proc sort
。
编辑:或者,将所有内容都放在同一个查询中(如果你的意思是"同样的proc sql"):
proc sql;
create table new1 as
select id
,alid as blid
,pdate
,datepart(today) as dat1
,input(number,20.) as datno
,monotonic() as key
from (
select a.id,a.alid,b.pdate
from tb a
inner join tb1 act
on a.aid =act.aid
left join tb2 as b
on (r.alid=a.alid)
where a.did in (15,45)
)
group by datno, dat1
having key=min(key)
;
quit;