楼主: 陈苑利
306 4

[问答] 如何根据变量筛选出相同的观测计算前后观测的日期间隔 [推广有奖]

  • 1关注
  • 0粉丝

高中生

65%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
180 点
帖子
19
精华
0
在线时间
25 小时
注册时间
2011-10-31
最后登录
2017-9-14

陈苑利 发表于 2017-9-14 09:49:19 |显示全部楼层
       各位大神,请教大家一个关于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



感谢感谢

支持楼主:购买VIP购买贵宾 购买后,论坛将把您花费的资金全部奖励给楼主,以表示您对TA发好贴的支持
 
载入中......
stata SPSS
l1i2n3i4n5g 在职认证  发表于 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时的时间间隔
回复

使用道具 举报

l1i2n3i4n5g 在职认证  发表于 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;
回复

使用道具 举报

foocares 发表于 2017-9-18 04:03:00 |显示全部楼层
除了上头提到的可以在数据步实现的逻辑,我感觉你的观测数据里总有一个时间变量在,那么是不是可以考虑把时间序列的lag和dif两个函数用起来。
回复

使用道具 举报

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

GMT+8, 2017-9-24 16:45