请选择 进入手机版 | 继续访问电脑版
楼主: tangliang0905
1431 3

[技术讨论与投票] 关于怎样确认叠加效应 [推广有奖]

  • 1关注
  • 3粉丝

讲师

52%

还不是VIP/贵宾

-

威望
0
论坛币
1167 个
通用积分
1.0083
学术水平
13 点
热心指数
20 点
信用等级
11 点
经验
30311 点
帖子
212
精华
0
在线时间
834 小时
注册时间
2012-11-29
最后登录
2018-12-11

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
碰到一个题目,就是怎样确认叠加效应。其实就是设计病人在一段时间服用药物A,然后第二段时间服用药物B,第三段时间服用药物C,第四段时间服用药物D,必须知道中间有没有有一天他会同时服用ABCD这四种药物,那样会非常危险,但是这样的数据很复杂,不知道怎样解答,希望有大拿可以帮助我解决这个问题
DATA HAVE;
INPUT ID $ BEGINDT MMDDYY10. +1 ENDDT MMDDYY10.  DRUG $;
FORMAT BEGINDT ENDDT MMDDYY10.;
CARDS;
1 01/01/2017 01/10/2017 A
1 02/15/2017 03/15/2017 A
1 04/01/2017 04/10/2017 B
1 05/01/2017 05/02/2017 A
1 06/01/2017 07/31/2017 B
1 06/15/2017 06/26/2017 C
1 07/01/2017 07/02/2017 A
1 07/19/2017 07/20/2017 D
1 08/01/2017 09/10/2017 A
2 05/02/2017 06/01/2017 B
2 06/10/2017 07/10/2017        B
2 06/10/2017 07/10/2017        B
2 08/16/2017 09/15/2017        C
3 11/11/2016 11/16/2016 A
3 11/12/2016 11/15/2016 A
3 11/12/2016 11/15/2016 B
3 11/15/2016 12/15/2016 C
3 12/02/2016 12/03/2016 D
;
RUN;


但是其中有些病人不会吃四种药,那么吃三种药也要被记录下来,作为次一级危险的信号。

希望有大拿可以帮我一下子,拜谢拜谢

二维码

扫码加我 拉你入群

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

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


回帖推荐

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

简单点可以这么处理一下

whymath 发表于2楼  查看完整内容

我有一种解法 1. 取最小日期和最大日期值,生成数据集,处于这两个日期间的每一天(含端点)一条观测; 2. 上一部中生成的数据集与你给出的HAVE数据集作全连接,去掉未用药的记录; 3. 使用汇总函数对每个受试者每个日期进行计数,计数为4的为使用了4次药物; 注: 若要知道的是使用了4种药物的受试者,应该在第3步前进行去重。
已有 1 人评分热心指数 收起 理由
eijuhz + 1 精彩帖子

总评分: 热心指数 + 1   查看全部评分

whymath 发表于 2018-12-8 22:19:57 |显示全部楼层 |坛友微信交流群
我有一种解法

1. 取最小日期和最大日期值,生成数据集,处于这两个日期间的每一天(含端点)一条观测;
2. 上一部中生成的数据集与你给出的HAVE数据集作全连接,去掉未用药的记录;
3. 使用汇总函数对每个受试者每个日期进行计数,计数为4的为使用了4次药物;

注: 若要知道的是使用了4种药物的受试者,应该在第3步前进行去重。
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
admin_kefu + 20 热心帮助其他会员
tangliang0905 + 5 + 3 + 3 + 3 精彩帖子

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

使用道具

linhaoran 发表于 2018-12-10 11:29:16 |显示全部楼层 |坛友微信交流群
简单点可以这么处理一下
  1. data b;
  2. set have;
  3. format dt yymmdd10.;
  4. do dt = begindt to enddt;
  5.         output;
  6. end;
  7. drop begindt enddt;
  8. run;

  9. proc sql;
  10. create table c as
  11. select id, dt, count(distinct drug) as drug_cnt
  12. from b
  13. group by 1,2
  14. having drug_cnt >=3
  15. order by drug_cnt descending;
  16. quit;
复制代码
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
admin_kefu + 20 热心帮助其他会员
tangliang0905 + 5 + 3 + 3 + 3 精彩帖子

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

使用道具

tangliang0905 发表于 2018-12-10 12:52:26 |显示全部楼层 |坛友微信交流群
DATA HAVE;
INPUT ID $  BEGINDT MMDDYY10.+1 ENDDT MMDDYY10. DRUG $;
FORMAT BEGINDT ENDDT MMDDYY10.;
CARDS;
1 01/01/2017 01/10/2017 A
1 02/15/2017 03/15/2017 A
1 04/01/2017 04/10/2017 B
1 05/01/2017 05/02/2017 A
1 06/01/2017 07/31/2017 B
1 06/15/2017 06/26/2017 C
1 07/01/2017 07/02/2017 A
1 07/19/2017 07/20/2017 D
1 08/01/2017 09/10/2017 A
2 05/02/2017 06/01/2017 B
2 06/10/2017 07/10/2017 B
2 06/10/2017 07/10/2017 B
2 08/16/2017 09/15/2017 C
3 11/11/2016 11/16/2016 A
3 11/12/2016 11/15/2016 A
3 11/12/2016 11/15/2016 B
3 11/15/2016 12/15/2016 C
3 12/02/2016 12/03/2016 D
;
RUN;

PROC SORT DATA=HAVE;
BY ID BEGINDT;
RUN;
DATA HAVE1;
SET HAVE;
BY ID BEGINDT;
DO I = BEGINDT TO ENDDT;
OUTPUT;
END;
KEEP ID DATE;
FORMAT DATE MMDDYY10.;
RUN;

PROC SORT DATA=HAVE1 NODUP;
BY _ALL_;
RUN;

PROC SQL;
CREATE TABLE HAVE2 AS
SELECT A.ID,
       A.DATE,
           B.DRUG
FROM HAVE1 AS A LEFT JOIN HAVE AS B ON A.ID = B.ID AND A.DATE BETWEEN B.BEGINDT AND B.ENDDT
;
QUIT;

PROC SQL;
CREATE TABLE FINAL AS
SELECT ID,
       DATE,
       COUNT(DISTINCT DRUG) AS DRUGCNT
FROM HAVE2
GROUP BY 1,2
ORDER BY 3 DESC
;
QUIT;


感谢上面两位的指导,我大概就是按照你们的思路写的,谢谢

使用道具

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

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

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

GMT+8, 2024-4-19 09:38