楼主: tanaya
1794 5

编写SAS程序挑选断点时间 [推广有奖]

  • 3关注
  • 1粉丝

硕士生

96%

还不是VIP/贵宾

-

威望
0
论坛币
700 个
通用积分
4.0600
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
14057 点
帖子
73
精华
0
在线时间
314 小时
注册时间
2012-3-20
最后登录
2023-11-9

楼主
tanaya 发表于 2013-9-9 23:40:54 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
各位大家:
      现有以下两种数据类型,应该如何编写程序计算准确时间:
第一种
入组时间 第一次检查 结果 第二次检查结果 第三次检查 结果
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天在服药,不知道具体程序怎么写?
二维码

扫码加我 拉你入群

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

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

关键词:sas程序 编写程序 具体时间 准确时间 数据类型 程序 断点

沙发
wwang111 发表于 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;
只有一个罗纳尔多

藤椅
tanaya 发表于 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”,好像程序跑不出来哦!附上数据

板凳
tanaya 发表于 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


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

地板
tanaya 发表于 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;
  • 您需要登录后才可以回帖 登录 | 我要注册

    本版微信群
    加好友,备注cda
    拉您进交流群
    GMT+8, 2026-1-27 19:03