全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1670 3
2018-12-08
碰到一个题目,就是怎样确认叠加效应。其实就是设计病人在一段时间服用药物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;


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

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

二维码

扫码加我 拉你入群

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

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

全部回复
2018-12-8 22:19:57
我有一种解法

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

注: 若要知道的是使用了4种药物的受试者,应该在第3步前进行去重。
二维码

扫码加我 拉你入群

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

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

2018-12-10 11:29:16
简单点可以这么处理一下
复制代码
二维码

扫码加我 拉你入群

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

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

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;


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

扫码加我 拉你入群

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

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

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

说点什么

分享

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