全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3590 8
2013-11-14
有这样的结构的数据集
data a;
input id $ open_dt yyddmm10. close_dt yyddmm10.;
cards;
a 2013-01-01 2013-01-31
a 2013-02-01 2013-02-28
b 2013-01-01 2013-01-31
b 2013-02-01 2013-02-28
;
run;
现在我想要各个id下面最早的open_dt和最晚的close_dt
就是这样的:
a 2013-01-01 2013-02-28
b 2013-01-01 2013-02-28

请问这要怎么才能做到呢?
二维码

扫码加我 拉你入群

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

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

全部回复
2013-11-14 21:25:34
proc slq;
select min(open_dt),max(close_dt) from a
group by id;
quit;
二维码

扫码加我 拉你入群

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

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

2013-11-14 21:26:20
方法一:
data a;
input id $ open_dt yymmdd10. close_dt yymmdd10.;
cards;
a 2013-01-01 2013-01-31
a 2013-02-01 2013-02-22
b 2013-01-01 2013-01-31
b 2013-02-01 2013-02-28
;
run;

proc sort data=a out=b;
by id open_dt;
run;

data c;
retain m n;
set b;
by id open_dt;
if first.id then do;
m=0;
n=open_dt;
end;
m=max(m,close_dt);
if last.id;
drop open_dt close_dt;
rename n=open_dt m=close_dt;

proc print;
format open_dt   close_dt yymmddn8.;
run;

方法二:
data a;
input id $ open_dt yymmdd10. close_dt yymmdd10.;
cards;
a 2013-01-01 2013-01-31
a 2013-02-01 2013-02-22
b 2013-01-01 2013-01-31
b 2013-02-01 2013-02-28
;
run;

proc sort data=a out=b ;
by id  open_dt;
run;

proc sort data=a out=b2 ;
by id  descending close_dt;
run;

data c;
merge b b2;
by id;
if first.id;
format open_dt close_dt  yymmdd10. ;

proc print;
run;


还有很多。。。,自己应该可以了。
二维码

扫码加我 拉你入群

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

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

2013-11-17 21:28:27
楼上 A072560 非常棒!Very Good!
二维码

扫码加我 拉你入群

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

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

2013-11-17 21:29:51
ynaktank 发表于 2013-11-17 21:28
楼上 A072560 非常棒!Very Good!
楼上的楼上不够棒?
二维码

扫码加我 拉你入群

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

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

2013-11-17 21:33:00
哈哈,方法很多,但是楼上的楼上的楼上的楼上相当棒!
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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