全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2098 4
2013-07-31
悬赏 100 个论坛币 已解决
有以下表格数据,

caseIDEntdathoscost

260754

1950-3-31

62973.59

277270

1950-12-23

136719.83

277270

1951-2-27

95801.55

277270

1952-5-22

54787.56

277270

1952-10-5

163104.40

280785

1951-2-28

83876.28

280785

1952-6-23

157131.43



我想构建一个新库,算法如下:
1、同一caseID,如果有多次住院记录,按照入院时间(Entdat)排序后,除首次住院外,计算每次入院时间与首次入院时间之差Suryear,以年为单位。
2、如果Survyear>1,定义1年以内的住院花费之和为FirCost,1年以内的住院次数为FirNumHos;1年之后的住院花费之和为ConCost,1年之后的住院次数为ConNumHos;
3、计算同一caseID总的住院次数(TNumHos)和总的住院花费(Thoscost)

最终应该得到的数据表如下:
caseIDThoscostTNumHosFirCostFirNumHosConCostConNumHos

260754

62973.59

1

62973.59

1

0

0

277270

450413.34

4

232521.38

2

217891.96

2

280785

241007.71

2

83876.28

1

157131.43

1


最佳答案

zhou.wen 查看完整内容

data a; input caseID $ Entdat yymmdd10. hoscost $; format Entdat yymmdd10.; cards; 260754 1950-3-31 62973.59 277270 1950-12-23 136719.83 277270 1951-2-27 95801.55 277270 1952-5-22 54787.56 277270 1952-10-5 163104.40 280785 1951-2-28 83876.28 280785 1952-6-23 157131.43 run; proc sort data=a; by caseID Entdat; run; data out; set a; by caseID; retain firstdate Thoscost TNumHos Fir ...
二维码

扫码加我 拉你入群

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

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

全部回复
2013-7-31 10:49:07
data a;
input caseID $        Entdat yymmdd10. hoscost $;
format Entdat yymmdd10.;
cards;
260754 1950-3-31 62973.59
277270 1950-12-23 136719.83
277270 1951-2-27 95801.55
277270 1952-5-22 54787.56
277270 1952-10-5 163104.40
280785 1951-2-28 83876.28
280785 1952-6-23 157131.43
run;
proc sort data=a;
by caseID Entdat;
run;

data out;
set a;
by caseID;
retain firstdate Thoscost TNumHos FirCost FirNumHos ConCost ConNumHos;
if first.caseID then firstdate=Entdat;
if Entdat-firstdate<365 then tag=1;else tag=2;
if first.caseID then do;
Thoscost=0;
TNumHos=0;
FirCost=0;
FirNumHos=0;
ConCost=0;
ConNumHos=0;
end;
Thoscost+hoscost;
TNumHos+1;
if tag=1 then do;
FirCost+hoscost;
FirNumHos+1;
end;
if tag=2 then do;
ConCost+hoscost;
ConNumHos+1;
end;
if last.caseID;
keep caseID Thoscost TNumHos FirCost FirNumHos ConCost ConNumHos;
run;
二维码

扫码加我 拉你入群

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

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

2013-7-31 10:56:26
不会,帮明玥顶
二维码

扫码加我 拉你入群

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

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

2013-7-31 12:44:37
data a;
input caseID $        Entdat yymmdd10. hoscost $;
format Entdat yymmdd10.;
cards;
260754 1950-3-31 62973.59
277270 1950-12-23 136719.83
277270 1951-2-27 95801.55
277270 1952-5-22 54787.56
277270 1952-10-5 163104.40
280785 1951-2-28 83876.28
280785 1952-6-23 157131.43
run;
proc sort data=a;
by caseID Entdat;
run;

data out;
set a;
by caseID;
retain firstdate Thoscost TNumHos FirCost FirNumHos ConCost ConNumHos;
if first.caseID then firstdate=Entdat;
if Entdat-firstdate<365 then tag=1;else tag=2;
if first.caseID then do;
Thoscost=0;
TNumHos=0;
FirCost=0;
FirNumHos=0;
ConCost=0;
ConNumHos=0;
end;
Thoscost+hoscost;
TNumHos+1;
if tag=1 then do;
FirCost+hoscost;
FirNumHos+1;
end;
if tag=2 then do;
ConCost+hoscost;
ConNumHos+1;
end;
if last.caseID;
keep caseID Thoscost TNumHos FirCost FirNumHos ConCost ConNumHos;
run;
二维码

扫码加我 拉你入群

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

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

2013-7-31 13:25:50
楼上不错,比较好的办法。
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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