把所有东西都放到sas sql中

时间:2017-10-05 15:38:32

标签: sas

我有两个代码,一个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步骤。

1 个答案:

答案 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中名为todaynumbernew的变量。如果该数据集应该是您的第一个SQL查询的结果,那么这些变量就不存在了,它们的值以及dat1中的datnonew1的值将始终存在失踪。 另外,我假设您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;