楼主: 陈苑利
1799 4

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

  • 1关注
  • 0粉丝

高中生

65%

还不是VIP/贵宾

-

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

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
       各位大神,请教大家一个关于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



感谢感谢
二维码

扫码加我 拉你入群

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

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


沙发
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两个函数用起来。

使用道具

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

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

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

GMT+8, 2024-4-25 04:47