楼主: tanaya
2344 4

[有偿编程] 医疗数据整理 [推广有奖]

  • 3关注
  • 1粉丝

硕士生

96%

还不是VIP/贵宾

-

威望
0
论坛币
700 个
通用积分
4.0600
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
14057 点
帖子
73
精华
0
在线时间
314 小时
注册时间
2012-3-20
最后登录
2023-11-9

楼主
tanaya 发表于 2014-11-20 22:04:43 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
各位大侠好!
       有如下数据,请教大家:
姓名 病案号 手术日期 手术名称出院日期
小王 01 2012-11-2 xx 2012-11-7
小李 02 2012-11-2 xy 2012-11-8
小李 02 2012-11-2 xy 2012-11-8
小黄 03 2012-11-2 xx 2012-11-9
小黄 03 2012-11-6 xy 2012-11-9
小黄 03 2012-11-7 xa 2012-11-18
小黄 03 2012-11-11 xz 2012-11-18

问题1:如果一个病人出院日期前只做了1次手术,那么新变量重返次数=0;如病案号01
如果一个病人出院日期前做了2次以上相同或不同的手术(含2次),则重返次数=1;但是,如果手术名称相同,需要生成其他新变量同手术次数=1;如病案号02
如果同一个病人有不同出院日期,且相同出院日期前做了2次以上相同或不同手术(含2次),则重返次数=2;如病案号03。如果其中一个出院日期前只做了1次手术,则重返次数=1;(没有例子)
问题2:如果我想挑选出出院日期完全相同的病人,如只输出病案号02、03
问题3:如果我想以病案号为分组变量,批量转置手术日期、手术名称、出院日期,不知是否可行?
问题4:此数据从系统导出,日期变量为字符型,试着以format为日期格式似乎不可行,是否有更合适的方法,我可以继续搜索,如果有好方法可以分享下!
二维码

扫码加我 拉你入群

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

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

关键词:数据整理 format FORMA form 日期变量 姓名

沙发
mzmxly81 发表于 2014-11-20 22:18:29
这应该都属于sas base的内容,用sort过程,first.VAR等等应该可以完成的,看下BASE的这些过程,不知道会不会用到lag函数,都看下吧,很有用的,纯属路过。。。。

藤椅
wwang111 发表于 2014-12-1 13:31:32
问题1:没有完全理解,暂时把前两个如果看作是没有不同出院日期的人,后两个看作有不同出院日期的人,可能没包括所有的情况,请楼主先试一下:

  1. data test;
  2. input name $ caseid $ surdate : $10. surname $ outdate : $10.;
  3. cards;
  4. XW         01        2012-11-2        xx        2012-11-7
  5. XL         02        2012-11-2        xy        2012-11-8
  6. XL         02        2012-11-2        xy        2012-11-8
  7. XH         03        2012-11-2        xx        2012-11-9
  8. XH   03        2012-11-6        xy        2012-11-9
  9. XH         03        2012-11-7        xa        2012-11-18
  10. XH   03        2012-11-11        xz        2012-11-18
  11. ;

  12. * choose subjects who have different discharge dates;
  13. proc sql;
  14. create table dupdate as
  15. select distinct name
  16. from test
  17. group by name
  18. having count(distinct outdate)>1;
  19. quit;

  20. * condition 1;
  21. proc sql;
  22. create table cond1 as
  23. select *, 0 as bktime
  24. from test
  25. where name not in (select name from dupdate)
  26. group by name,caseid
  27. having count(*)=1 and surdate<=outdate;
  28. quit;

  29. * meet condition 2 and have the same surgery name;
  30. proc sql;
  31. create table cond2_1 as
  32. select *, 1 as bktime, 1 as surtime
  33. from test
  34. where name not in (select name from dupdate)
  35. group by name,caseid
  36. having count(*)>=2 and count(distinct surname)=1 and surdate<=outdate;
  37. quit;

  38. * meet condition 2 and do not having the same surgery name;
  39. proc sql;
  40. create table cond2_2 as
  41. select *, 1 as bktime
  42. from test
  43. where name not in (select name from dupdate)
  44. group by name, caseid
  45. having count(*)>=2 and count(distinct surname)>1 and surdate<=outdate;
  46. quit;

  47. * condition 3;
  48. proc sql;
  49. create table cond3 as
  50. select *, 2 as bktime
  51. from test
  52. where name in (select name from dupdate)
  53. group by  name, caseid, outdate
  54. having count(*)>=2 and surdate<=outdate;
  55. quit;

  56. * condition4;
  57. proc sql;
  58. create table cond4 as
  59. select *, 1 as bktime
  60. from test
  61. where name in (select name from dupdate)
  62. group by  name, caseid, outdate
  63. having count(*)=1 and surdate<=outdate;
  64. quit;

  65. data combine;
  66. set cond1 cond2_1 cond2_2 cond3 cond4;
  67. run;
复制代码


问题2:“挑选出出院日期完全相同的病人” 应该怎么理解?病案号03有两个不同的出院日期

问题3: 楼主需要转置后得到什么样的格式,可否举个例子?

问题4: 是这个意思吗?


data test1;
set test;
date1=input(surdate,yymmdd10.);
date2=input(outdate,yymmdd10.);
format date1 date2 yymmdd10.;
keep surdate outdate date1 date2;
run;
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
tanaya + 5 + 1 + 1 + 1 热心帮助其他会员

总评分: 论坛币 + 5  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

板凳
tanaya 发表于 2014-12-4 10:39:08
你好,问题1、问题2、问题4你写的程序已经回答,问题3:
想把以下表格
姓名         病案号 手术日期         手术名称        出院日期
小李         02         2012-11-2         xy              2012-11-8
小李         02         2012-11-2         xy              2012-11-8
一步到位转置变为如下格式
姓名         病案号 手术日期1  手术日期2  手术名称1 手术名称2         出院日期1    出院日期2
小李         02          2012-11-2  2012-11-2   xy                 xy             2012-11-8     2012-11-8
不知是否可行?
非常感谢你的帮助和引导!

报纸
wwang111 发表于 2014-12-4 12:34:20
有些美元符号显示不出来,比如input跟length语句后面的,请根据情况修改。
  1. data test;
  2. input name $ caseid $ surdate : $10. surname $ outdate : $10.;
  3. cards;
  4. XL         02        2012-11-2        xy        2012-11-8
  5. XL         02        2012-11-2        xy        2012-11-8
  6. ;

  7. proc transpose data=test out=trans;
  8. by name caseid;
  9. var surdate surname outdate;
  10. run;

  11. data aaa;
  12. set trans end=last;
  13. length dsname $200 code $1000;
  14. retain dsname code;
  15. if _n_=1 then dsname=strip(_name_);
  16. else dsname=strip(dsname)||''||strip(_name_);
  17. code='proc transpose data=test out='||strip(_name_)||'(drop=_name_) prefix='||strip(_name_)||';by name caseid;var '
  18.    ||strip(_name_)||';run;';
  19.   if last then code=strip(code)||'data wanted;merge '||strip(dsname)||';by name caseid;run;';

  20.         call execute(code);
  21. run;
复制代码




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

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