在30天内,有多少病人服用了超过2种药物?
来源:互联网 发布:php格式的视频怎么办 编辑:程序博客网 时间:2024/04/29 10:32
声明:资料来源SAS中文论坛
问: 在30天内,有多少病人服用了超过2种药物?SAS数据中的变量有:病人ID, 用药日期以及对应的药名。
id date medicine
1 2010jan01 a
1 2010jan04 a
1 2010jan16 a
1 2010feb04 b
2 2010mar03 c
2 2010mar04 c
....
假设数据量很大,有30万行,敬请牛人指教如何用SAS实现,并且计算机用时越少越好。
sxlion的思路:
data raw;
input id date $10. drug $1.;
date=input(catt(substr(date,8,2), substr(date,5,3),substr(date,1,4)), date12.);
cards;
1 2010jan01 a
1 2010jan04 a
1 2010jan16 a
1 2010feb04 b
1 2010feb17 a
1 2010mar08 c
2 2010feb10 c
2 2010feb14 c
2 2010mar03 b
2 2010mar04 c
3 2010jan16 a
3 2010jan18 a
3 2010mar04 c
;
run;
proc sort data=raw out=ex;
by id date drug;
run;
data ex;
set ex;
if id=lag(id) and 0 <= date-lag(date)< 30 and drug ne lag(drug);
run;
proc sql;
select id as patient, 'Y' as indicator 'Patient who had more than 2 drugs in 30 day'
from ex;
quit;
注:这里用到lag函数,导出滞后一期的变量值。
Super K的思路(速度很快):
data raw1(keep=coun);
attrib id1 format=best8. date1 format=date. drug1 format=$1.;
retain id1;
retain date1;
retain drug1;
retain count;
input #1 id date $10. drug $1. ;
input #2 id2 date2 $10. drug2 $1. ;
date=input(catt(substr(date,8,2), substr(date,5,3),substr(date,1,4)), date12.);
date2=input(catt(substr(date2,8,2), substr(date2,5,3),substr(date2,1,4)), date12.);
if (id=id2 and drug^=drug2 and date2<date+30) then do;if count^=id then coun+1;count=id;end;
if id1^=. and (id1=id and drug1^=drug and date<date1+30) then do;if count^=id then coun+1;count=id;end;
id1=id2;
date1=date2;
drug1=drug2;
cards;
1 2010jan01 a
1 2010jan04 a
1 2010jan16 a
1 2010feb04 b
1 2010feb17 a
1 2010mar08 c
2 2010feb10 c
2 2010feb14 c
2 2010mar03 b
2 2010mar04 c
3 2010jan16 a
3 2010jan18 a
3 2010mar04 c
;
run;
注:完全用data步搞到,对函数用的“出神入化”:attrib,retain,input,catt,substr,求和
- 在30天内,有多少病人服用了超过2种药物?
- 有1000瓶药水,其中只有一瓶有毒。现在用小白鼠进行实验,小白鼠只要服用任意量有毒药水就会在24小时内死亡。问至少要用多少只小白鼠进行实验才能检测出哪瓶药水有毒?
- 有多少开发人员是超过四十的?
- 有多少开发人员是超过四十的?
- 有多少程序员超过四十岁呢?
- js制作日历,获取月份内有多少天。
- HTML内超过多少像素以省略号显示
- java 得到 时间段内 有多少个月 或者 多少天 代码
- 有多少开发人员是超过四十岁的呢
- 支架后服用药物出现严重副作用的最有效治疗方法
- 有1000桶酒,其中1桶有毒.而一旦吃了,毒性会在1周后发作.现在我们用小老鼠做实验,要在1周内找出那桶毒酒,问最少需要多少老鼠.
- 有1000 桶酒,其中1 桶有毒。而一旦吃了,毒性会在1 周后发作。现在我们用小老鼠做实验,要在1 周内找出那桶毒酒,问最少需要多少老鼠。
- 在O(n)的时间复杂度内找出数组中出现次数超过了一半的数
- 如何在O(N)的时间复杂度内找出数组中出现次数超过了一半的数
- 如何在O(n)的时间复杂度内找出数组中出现次数超过了一半的数
- 有多少种方式可以在vim 中插入行号
- 在线路设计里“地”有多少种
- 在 JavaScript 中,有多少种不同类型的循环?
- 瑞星宣布个人安全软件产品永久免费
- VC的文件操作和文件对话框使用
- 收藏:SAP BW 学习笔记(五)
- Android用户界面-菜单总结
- Vim的使用(四)
- 在30天内,有多少病人服用了超过2种药物?
- Canvas4 开坑事宜.....
- py del_file
- Vim的使用(五)
- chm文件终于可以打开了
- 【叶子函数分享八】取出字符串中的汉字、字母或是数字
- Vim的使用(六)
- Fedora14下改变开机背景
- 安装Visual Studio 6.0时出现一个“Setup Was Unable to Create a DCOM User Account”错误的解决方法