我正在尝试计算孩子接受寄养的时间。但是,我遇到了一些问题。我的数据如下所示:
对于每个人(ID),我需要计算持续时间(end_date-start_date)。但是,我还需要应用一条规则,规定如果在同一类型的寄养服务中,结束日期和开始日期之间的间隔时间少于5天,则应将其视为连续放置。如果在同一类型的寄养家庭中,从结束日期到开始日期之间有超过五天的时间,则这是一个新的位置。如果这是一种新型的寄养服务,那就是新的安置方式。变量“ duration”是应如何计算的。
我尝试了以下代码,但是它不能以正确的方式工作+我不知道如何应用“五天”规则。
Proc sort data=have out=want;
by id type descending start_date;
run;
Data want;
set want;
by id type;
retain last_date;
if first.id or first.type then do;
last_date=end_date;
end;
if last.id or last.type then duration=(end_date-start_date);
run;
非常感谢您的帮助!
答案 0 :(得分:1)
在此处使用一堆保留语句来实现这一目标:
data want;
set have;
by id ;
retain true_sd prev_ed prev_type;
if first.id then call missing(prev_type);
if type ~= prev_type then do;
true_sd = sd;
call missing(prev_ed);
call missing(prev_type);
end;
if sd - prev_ed > 5 then true_sd = sd;
duration = ed - true_sd;
output;
prev_type = type;
prev_ed = ed;
format sd ed true_sd prev_ed date.;
run;
(此处假定类型和id为数字。ed为end_date,sd为start_date)