全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1711 5
2013-09-09
各位大家:
      现有以下两种数据类型,应该如何编写程序计算准确时间:
第一种
入组时间 第一次检查 结果 第二次检查结果 第三次检查 结果
2011-9-27
漏检 2011-11-10 0 2011-11-30 1
2012-1-1 2012-1-15 0 2012-1-271
2012-3-1 2013-3-15 0 漏检 2013-4-1 1
    对于每一个个体,我想知道这个个体第一次出现结果为阳性(1)的具体时间,即从入组开始经历多少天开始出现阳性,其中如第3个个体期间有漏检,漏检的时间要剔除掉,计算具体时间,程序应该如何编写?
第二种:

id 服药记录
1 2011-1-1
1 2011-1-2
1 2011-1-10
2 2012-1-5
2 2012-1-6
3 2012-1-8
3 2012-1-10
3 2012-1-12
3 2012-1-16
我想知道如何编写程序,知道每一个个体具体服药天数,比如第1个,期间隔了10天,但其实就3天在服药,不知道具体程序怎么写?
二维码

扫码加我 拉你入群

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

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

全部回复
2013-9-10 09:26:05
第一种:
data test1;
input date $1-10 test1 $11-20  result1 21 test2 $23-33 result2 34 test3 $36-46 result3 47;
cards;
2011-9-27 null      . 2011-11-10 0 2011-11-30 1
2012-1-1  2012-1-15        0 2012-1-27  1 null                  .
2012-3-1  2013-3-15        0 null                  . 2013-4-1   1
;

data want1;
set test1;
array res[*] result1-result3;
array dt[*] test1-test3;
do i=1 to dim(res);
if res[i]=1 then do;
  resdt=dt[i];
  leave;
end;
end;
if resdt ne '' then dur=input(resdt,yymmdd10.)-input(date,yymmdd10.)+1;
keep date resdt dur;
run;

第二种:
data test2;
input id date : $10.;
cards;
1         2011-1-1
1         2011-1-2
1         2011-1-10
2         2012-1-5
2         2012-1-6
3         2012-1-8
3         2012-1-10
3         2012-1-12
3         2012-1-16
;

proc sql;
create table want2 as
select id, count(date) as days
from test2
group by 1;
quit;
二维码

扫码加我 拉你入群

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

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

2013-9-10 11:23:31
wwang111 发表于 2013-9-10 09:26
第一种:
data test1;
input date $1-10 test1 $11-20  result1 21 test2 $23-33 result2 34 test3 $36- ...
第一种中,如果我的时间是缺失的,而不是像你填充了“null”,好像程序跑不出来哦!附上数据
二维码

扫码加我 拉你入群

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

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

2013-9-10 11:24:36
wwang111 发表于 2013-9-10 09:26
第一种:
data test1;
input date $1-10 test1 $11-20  result1 21 test2 $23-33 result2 34 test3 $36- ...
  

2011-7-13

  

1

2011-7-27

1

2011-10-5

1

2011-10-30

0

2011-11-7

0

2011-10-31

1

2011-10-9

1

2011-11-29

0

2011-10-6

0

2011-9-24

1

2011-10-9

0

2011-10-31

1

2011-11-29

0

2011-11-7

0

2011-10-6

1

2011-10-30

1

2011-11-29

0

2011-12-19

1

2011-10-3

0

2011-10-30

0

2011-12-2

0

2011-12-19

1

2011-11-1

1

2011-12-19

1

2012-1-17

1


二维码

扫码加我 拉你入群

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

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

2013-9-10 11:33:15
tanaya 发表于 2013-9-10 11:23
第一种中,如果我的时间是缺失的,而不是像你填充了“null”,好像程序跑不出来哦!附上数据
这个貌似跟填充NULL无关啊,我这里即使不填充NULL,只留下一个空值也是没问题的
二维码

扫码加我 拉你入群

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

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

2013-9-10 20:45:15
wwang111 发表于 2013-9-10 11:33
这个貌似跟填充NULL无关啊,我这里即使不填充NULL,只留下一个空值也是没问题的
非常感谢你!根据你的程序,稍微做了变动,最后数据跑出来了!附程序,一起学习!
data b;
set a;
format resdt yymmdd10.;
array res
  • result1-result24;
    array dt
  • data1-data24;
    do i=1 to dim(res);*dim返回数组当中元素的个数,元素简言之就是变量。求数组第一维元素个数;
    if res=1 then do;
      resdt=dt;
      leave;
    end;
    end;
    if resdt ne '' then dur=resdt-var6+1;
    keep var6 resdt dur;
    run;
  • 二维码

    扫码加我 拉你入群

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

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

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

    分享

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