楼主: moonstone
1800 4

[有偿编程] 费用分类汇总程序求助,^_^ [推广有奖]

讲师

74%

还不是VIP/贵宾

-

威望
0
论坛币
10442 个
通用积分
336.6055
学术水平
160 点
热心指数
169 点
信用等级
124 点
经验
263186 点
帖子
237
精华
1
在线时间
520 小时
注册时间
2007-4-27
最后登录
2024-4-11

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 ...
关键词:分类汇总 costco survy Cost Case 程序 记录
沙发
zhou.wen 发表于 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;
Practice Is The Best Teacher!

使用道具

藤椅
counting 发表于 2013-7-31 10:56:26 |只看作者 |坛友微信交流群
不会,帮明玥顶

使用道具

板凳
zhou.wen 发表于 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;
Practice Is The Best Teacher!

使用道具

报纸
正午 发表于 2013-7-31 13:25:50 |只看作者 |坛友微信交流群
楼上不错,比较好的办法。

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-29 01:24