计算SAS中连续访问之间的时间间隔

时间:2014-09-21 23:56:23

标签: datetime sas group-by

我有长格式的重复措施,例如

id访问日期

1 1 1990-12-16

1 2 1991-01-12

1 3 1991-09-01

2 1 2000-12-12

2 2 2001-11-30

我想计算连续访问之间的时间间隔(以周为单位)。对于每次访问,它将是访问日期i减去访问i-1的数据[因此,访问的间隔= 0 =所有受试者的1]

我使用了滞后函数,但它所做的是时间与前一列之间的差异(这是另一个日期)。我怎样才能在列中明智地处理id。

我使用了以下代码:     数据数据1;

set data;

by id;

if first.id then interval=0;

else interval=lag(date)/7; *divided by 7 as I wanted the interval to be in weeks;

run; 

请帮忙吗?如果是重复的帖子,请指导我。然而,我还没有发现任何类似的东西。感谢。

PS:我不知道如何以数据格式获取数据。请帮助我,不要标记它!

2 个答案:

答案 0 :(得分:0)

您无法在条件代码中使用延迟日期,因此请将其从条件语句中删除。

假设日期是文本,您可以使用input()函数将其转换为SAS日期。

data data1; 
set data; 
by id; 
date_sas=input(date, anydtdte.);
interval_lag=lag(date_sas)/7;
if first.id then interval=0; 
else interval=interval_lag; 
run;

答案 1 :(得分:0)

我不知道你是否仍在寻找这个问题的答案,但这应该可以解决问题:

我用这种方式读了数据:

data test;
input id visit date :yymmdd.; *this is how you tell SAS to read the date as a date;
format date yymmdd10.;

datalines;
1 1 1990-12-16
1 2 1991-01-12
1 3 1991-09-01
2 1 2000-12-12
2 2 2001-11-30
;
run;

然后计算你想要的东西:

data data1; 
set test; 
by id; 
retain date_n;
if first.id then do;
interval = 0; 
date_n = date;
end;
else do;
interval = (date - date_n)/7; 
date_n = date;
end;
run;

希望这有帮助!