楼主: moonstone
2033 5

患者多条信息汇总程序咨询 [推广有奖]

已卖:1870份资源

讲师

74%

还不是VIP/贵宾

-

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

楼主
moonstone 发表于 2013-4-12 10:32:24 |AI写论文
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







关键词:sql语言 costs Cost Case name 时间

回帖推荐

YueweiLiu 发表于3楼  查看完整内容

沙发
YueweiLiu 发表于 2013-4-12 10:32:25
  1. data have;
  2.         input name $3. / age / sex $ caseID        / Diagdat yymmdd10. / Entdat yymmdd10. / Outdat yymmdd10. /hoscost;
  3.         format Diagdat Entdat Outdat yymmddd10.;
  4. cards;
  5. SFJ       
  6. 40
  7. 女        277270       
  8. 2010-12-24
  9. 2010-12-24
  10. 2011-1-28
  11. 136719.83
  12. SFJ       
  13. 41
  14. 女        277270       
  15. 2011-2-28
  16. 2011-2-28
  17. 2011-4-3
  18. 95801.55
  19. SFJ       
  20. 41
  21. 女        277270       
  22. 2011-5-23
  23. 2011-5-23
  24. 2011-6-11
  25. 54787.56
  26. SFJ       
  27. 41
  28. 女        277270       
  29. 2011-10-6
  30. 2011-10-6
  31. 2011-10-25
  32. 63104.4
  33. LHS       
  34. 56
  35. 女        280785       
  36. 2011-3-1
  37. 2011-3-1
  38. 2011-4-4
  39. 83876.28
  40. LHS       
  41. 56
  42. 女        280785       
  43. 2011-6-24
  44. 2011-6-24
  45. 2011-7-20
  46. 57131.43
  47. WGS       
  48. 58
  49. 女        291083       
  50. 2011-7-19
  51. 2011-7-19
  52. 2011-8-26
  53. 169990.75
  54. WGS       
  55. 58
  56. 女        291083       
  57. 2011-10-6
  58. 2011-10-6
  59. 2011-11-15
  60. 190025.72
  61. LHM       
  62. 55
  63. 女        260754       
  64. 2010-4-1
  65. 2010-4-1
  66. 2010-4-23
  67. 62973.59
  68. ;

  69. proc sql;
  70.         create table want as
  71.         select         caseID, sex,
  72.                         case when min(Entdat)=min(Diagdat) then min(Diagdat) else min(Entdat) end as Fin_diagdat format=yymmddd10.,
  73.                         max(Outdat) as Losdat format=yymmddd10.,
  74.                         calculated Losdat - calculated Fin_diagdat as Survday,
  75.                         n(caseID) as Numhos,
  76.                         sum(hoscost) as Totcost,
  77.                         avg(hoscost) as Avecost,
  78.                         min(age) as diaage
  79.         from have
  80.         group by caseID, sex;
  81. quit;
复制代码

藤椅
YueweiLiu 发表于 2013-4-12 12:04:02
  1. data have;
  2.         input name $3. / age / sex $ caseID        / Diagdat yymmdd10. / Entdat yymmdd10. / Outdat yymmdd10. /hoscost;
  3.         format Diagdat Entdat Outdat yymmddd10.;
  4. cards;
  5. SFJ       
  6. 40
  7. 女        277270       
  8. 2010-12-24
  9. 2010-12-24
  10. 2011-1-28
  11. 136719.83
  12. SFJ       
  13. 41
  14. 女        277270       
  15. 2011-2-28
  16. 2011-2-28
  17. 2011-4-3
  18. 95801.55
  19. SFJ       
  20. 41
  21. 女        277270       
  22. 2011-5-23
  23. 2011-5-23
  24. 2011-6-11
  25. 54787.56
  26. SFJ       
  27. 41
  28. 女        277270       
  29. 2011-10-6
  30. 2011-10-6
  31. 2011-10-25
  32. 63104.4
  33. LHS       
  34. 56
  35. 女        280785       
  36. 2011-3-1
  37. 2011-3-1
  38. 2011-4-4
  39. 83876.28
  40. LHS       
  41. 56
  42. 女        280785       
  43. 2011-6-24
  44. 2011-6-24
  45. 2011-7-20
  46. 57131.43
  47. WGS       
  48. 58
  49. 女        291083       
  50. 2011-7-19
  51. 2011-7-19
  52. 2011-8-26
  53. 169990.75
  54. WGS       
  55. 58
  56. 女        291083       
  57. 2011-10-6
  58. 2011-10-6
  59. 2011-11-15
  60. 190025.72
  61. LHM       
  62. 55
  63. 女        260754       
  64. 2010-4-1
  65. 2010-4-1
  66. 2010-4-23
  67. 62973.59
  68. ;

  69. proc sort data=have;
  70.         by caseID Diagdat;
  71. run;

  72. data want;
  73.         set have;
  74.         by caseID;
  75.         retain Fin_diagdat;
  76.         num+1;
  77.         Totcost+hoscost;
  78.         if first.caseID then do;
  79.                 if Diagdat=Entdat then Fin_diagdat=Diagdat;
  80.                 else Fin_diagdat=Entdat;
  81.         end;
  82.         if last.caseID then do;
  83.                 Losdat=Outdat;
  84.                 Survday=Losdat-Fin_diagdat;
  85.                 Numhos=num;
  86.                 Avecost=Totcost/Numhos;
  87.                 num=0;
  88.                 hoscost=0;
  89.                 output;
  90.         end;
  91.         format Fin_diagdat Losdat yymmddd10.;
  92.         drop num hoscost age;
  93. run;
复制代码

板凳
chaosxiao 发表于 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;

报纸
wangfengxi 发表于 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;

地板
iavjssssmqee 发表于 2013-4-13 21:57:25
学习了。谢谢。
决定了,心一恒,就不会害怕!!!

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-9 05:16