全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2044 4
2017-09-14
       各位大神,请教大家一个关于SAS的问题:我现在要分析再入院病人的情况,数据如下,若病人的id和icd都一样,说明这个病人符合再入院的条件,这时候我需要计算这次入院时间(day1)与上次出院时间(day2)的时间间隔。举例id=2时,有三条记录,其中n=3和n=4的iCD相同,生成两个变量day(时间间隔)和 var(再入院次数)对应在n=4的记录上,
此时day=day1(2016-3-5)-day2(2016-2-15),var=1。
id=4时,n=7,8,9符合条件,此时
对应在n=8的记录上是   day=day1(2016-4-1)-day2(2016-3-5),var=1;
对应在n=9的记录是   day=day1(2016-4-20)-day2(2016-4-7),var=2;

依此类推。

n       id         day1               day2               icd
1        1      2016-1-1         2016-1-7          G40.1
2        2      2016-2-3         2016-2-5          D20.1
3        2      2016-2-10       2016-2-15        G11.3
4        2      2016-3-5         2015-3-10        G11.3
5        3      2016-4-1         2016-4-9          E12.6
6        4      2016-2-1         2016-2-20        C15.1
7        4      2016-3-1         2016-3-5           D01.1
8        4      2016-4-1         2016-4-7          D01.1
9        4      2016-4-20       2016-5-1         D01.1



感谢感谢
二维码

扫码加我 拉你入群

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

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

全部回复
2017-9-14 16:04:48
data test;
        input n id day1 : yymmdd10. day2 : yymmdd10. icd $;
        format day1 day2 yymmdd10.;
cards;
1 1 2016-1-1 2016-1-7 G40.1
2 2 2016-2-3 2016-2-5 D20.1
3 2 2016-2-10 2016-2-15 G11.3
4 2 2016-3-5 2015-3-10 G11.3
5 3 2016-4-1 2016-4-9 E12.6
6 4 2016-2-1 2016-2-20 C15.1
7 4 2016-3-1 2016-3-5 D01.1
8 4 2016-4-1 2016-4-7 D01.1
9 4 2016-4-20 2016-5-1 D01.1
9 5 2016-4-20 2016-5-1 D01.1
;
run;

proc sort data=test;
        by id icd day1;
run;

data test1;
        set test;
        by id icd day1;
        retain temp_day2;
        if first.icd then do;
                temp_day2=day2;
                var=0;
        end;
        else var+1;
        if last.icd and var>0 then day=day1-temp_day2;
        drop temp_:;
run;

proc print;
run;
二维码

扫码加我 拉你入群

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

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

2017-9-14 17:39:05
l1i2n3i4n5g 发表于 2017-9-14 16:04
data test;
        input n id day1 : yymmdd10. day2 : yymmdd10. icd $;
        format day1 day2 yymmdd10.;
您好,非常感谢您的解答,您的程序差不多已经解决了我的问题,但是有个问题,对于有多个符合条件的id,我想达到的效果是每次都是减去上一个观测的入院日期,不是最后一个观测的day1减去first.id的day2,像数据里面的n=7,8,9,我需要分别计算n=7,8时的时间间隔,和n=8,9时的时间间隔
二维码

扫码加我 拉你入群

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

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

2017-9-14 20:48:25
陈苑利 发表于 2017-9-14 17:39
您好,非常感谢您的解答,您的程序差不多已经解决了我的问题,但是有个问题,对于有多个符合条件的id,我 ...
data test1;
        set test;
        by id icd day1;
        retain temp_day2;
        if first.icd then do;
                temp_day2=day2;
                var=0;
        end;
        else var+1;
        if var>0 then day=day1-temp_day2;
                temp_day2=day2;
        drop temp_:;
run;
二维码

扫码加我 拉你入群

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

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

2017-9-18 04:03:00
除了上头提到的可以在数据步实现的逻辑,我感觉你的观测数据里总有一个时间变量在,那么是不是可以考虑把时间序列的lag和dif两个函数用起来。
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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