我有长格式的重复措施,例如
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:我不知道如何以数据格式获取数据。请帮助我,不要标记它!
答案 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;
希望这有帮助!