全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1424 8
2013-02-21
昨天碰到一个需要需要在SAS DIS环境中实现以下的SQL,想了半天没解决,还请各位高手指点指点。问题描述如下,受注表Order中,主键为受注番号OrdID和受注明细号DetailID,同时还有2个字段,一个为用户ID(CID),一个为受注日(OrderDate)。需要得到每条数据的前回受注日LastOrdDate。也就是说,用本条数据的用户ID,再去查找一次受注表,找到所有受注日比当前记录小的数据中受注日最大的那一个日期。
实例数据如下
OrdID     DetailID    CID      OrderDate
1001      1              C001    20120605
1001      2              C001    20120713
1002      1              C001    20120827
1002      2              C001    20120827
1003      1              C002    20120614
1003      2              C002    20120709  

期望结果
OrdID       DetailID    CID        OrderDate    LastOrdDate
1001        1            C001      20120605   
1001        2            C001      20120713    20120605
1002        1            C001      20120827    20120713
1002        2            C001      20120827    20120713
1003       1             C002      20120614   
1003       2              C002    20120709    20120614

多谢您的关注与参与!



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-2-21 12:50:50
你的问题挺简单的,在一个data步里用lag函数,再把不符合条件(不同的CID)的删去就好
data want;
set have;
by CID OrdDate;
LastOrdDate=lag(OrdDate)
if first.OrdDate then LastOrdDate=.;
run;

也可以用proc expand来做,那个要规范些,并且不但可以lag,还可以lead
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-2-22 12:13:40
thank you for replying. We could only use SQL under the DIS environment.
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-2-22 13:54:41
proc sql;
   create table wanted as
    select distinct l.*,max(r.orderdate) as lastorddate format=yymmdd8.
           from test as l left join test as r
            on l.cid=r.cid and l.orderdate>r.orderdate
         group by l.cid,l.orderdate;
quit;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-2-22 14:35:36
楼上正解,崇拜!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-2-22 14:46:47
求教 pobel  
proc sql;
    create table wanted as
     select distinct l.*,max(r.orderdate) as lastorddate format=yymmdd8.
            from test as l , test as r
             where l.cid=r.cid and l.orderdate>r.orderdate
          group by l.cid,l.orderdate;
quit;

和您的程序比起来,好像lastorder缺失值的没有了,请问二者的区别在哪里,谢谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群