全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2008 5
2013-04-12
悬赏 50 个论坛币 已解决
有以下表格数据,我想构建一个新库,算法如下:

caseID相同的人,做如下处理
1、如果首次入院时间(Entdat)和首次诊断时间(Diadat)一致,将首次诊断时间定义为确诊时间(Fin_diagdat),如果不同,将首次入院时间定义为确诊时间;
2、定义最后一次出院时间(Outdat)为失访时间(Losdat);
3、计算确诊时间和失访时间之差为诊断后存活天数(Survday);
4、生成住院次数(Numhos);
5、根据历次住院花费(hoscost)生成总住院花费(totcost)
6、根据住院次数和总花费生存平均花费(avecost)
7、定义首次就诊年龄(diaage)

最终数据库包含变量:name,diaage,sex, caseID, Fin_diadat, Losdat, Survday, Numhos, totcost, avecost每个患者只有一条记录。

推荐采用SAS的SQL语言实现,谢谢啦,^_^

nameagesexcaseIDDiagdatEntdatOutdattotcost
SFJ

40

277270

2010-12-24

2010-12-24

2011-1-28

136719.83

SFJ

41

277270

2011-2-28

2011-2-28

2011-4-3

95801.55

SFJ

41

277270

2011-5-23

2011-5-23

2011-6-11

54787.56

SFJ

41

277270

2011-10-6

2011-10-6

2011-10-25

63104.4

LHS

56

280785

2011-3-1

2011-3-1

2011-4-4

83876.28

LHS

56

280785

2011-6-24

2011-6-24

2011-7-20

57131.43

WGS

58

291083

2011-7-19

2011-7-19

2011-8-26

169990.75

WGS

58

291083

2011-10-6

2011-10-6

2011-11-15

190025.72

LHM

55

260754

2010-4-1

2010-4-1

2010-4-23

62973.59







二维码

扫码加我 拉你入群

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

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

全部回复
2013-4-12 10:32:25
复制代码
二维码

扫码加我 拉你入群

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

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

2013-4-12 12:04:02
复制代码
二维码

扫码加我 拉你入群

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

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

2013-4-12 12:45:31
data j;
input name $3. age :2. sex :$2. id :6. d :anydtdte9. e :anydtdte9. o :anydtdte9. t 20.;
cards;
SFJ 40 女 277270 2010-12-24 2010-12-24 2011-1-28  136719.83
SFJ 41 女 277270 2011-2-28  2011-2-28  2011-4-3   95801.55
SFJ 41 女 277270 2011-5-23  2011-5-23  2011-6-11  54787.56
SFJ 41 女 277270 2011-10-6  2011-10-6  2011-10-25 63104.4
LHS 56 女 280785 2011-3-1   2011-3-1   2011-4-4   83876.28
LHS 56 女 280785 2011-6-24  2011-6-24  2011-7-20  57131.43
WGS 58 女 291083 2011-7-19  2011-7-19  2011-8-26  169990.75
WGS 58 女 291083 2011-10-6  2011-10-6  2011-11-15 190025.72
LHM 55 女 260754 2010-4-1   2010-4-1   2010-4-23  62973.59
;
run;
proc sort data=j;by id e;run;
data b;
set j;
by id e;

if  first.id then do;Fin_diagdat=e;diaage=age;end;


if Fin_diagdat^=.;
keep name id sex diaage Fin_diagdat;
run;
data c;
set j;
by id e;
j=lag(t);
retain Numhos totcost ;
if  first.id then Numhos=1;else Numhos+1;
if  first.id then totcost=t;else totcost=t+j;
if last.id then Losdat=o;
if last.id;
keep name id Numhos totcost Losdat;
run;
proc sort data=b;by id;run;
proc sort data=c;by id;run;
data aa;
merge b c;
Survday=Losdat-Fin_diagdat;
avecost=totcost/Numhos;
Losdat1=put(Losdat,ddmmyy10.);
Fin_diagdat1=put(Fin_diagdat,ddmmyy10.);
drop Losdat Fin_diagdat;
rename Fin_diagdat1=Fin_diagdat Losdat1=Losdat;
run;

二维码

扫码加我 拉你入群

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

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

2013-4-12 17:52:33
proc sort data=bb;
  by caseid diagdat;
run;
data cc;
  set bb;
  by caseid diagdat;
  informat fin_diagdat losdat date9.;
  format fin_diagdat losdat date9.;

  retain fin_diagdat diaage;
  if first.caseid then
    do;
      diaage=age;
      if entdat=diagdat then fin_diagdat=diagdat;
      else fin_diagdat=entdat;
      numhos=1;
   sumcost=totcost;
    end;
  else
    do;
      numhos+1;
   sumcost+totcost;
    end;
  if last.caseid then
    do;
      losdat=outdat;
      survday=losdat-fin_diagdat;
      avecost=sumcost/numhos;
      output;
    end;

  drop age diagdat entdat outdat;
run;
二维码

扫码加我 拉你入群

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

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

2013-4-13 21:57:25
学习了。谢谢。
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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