首页 > 解决方案 > 使用 SAS 按组计算日期之间的持续时间

问题描述

我试图计算一个孩子在寄养中的时间。但是,我遇到了一些问题。我的数据应如下所示:

在此处输入图像描述

对于每个人(ID),我需要计算持续时间(end_date-start_date)。但是,我还需要应用一条规则,即如果在同一类型的寄养中,结束日期和开始日期之间的时间少于 5 天,则应视为连续安置。如果同一个人在同一类型的寄养中的结束日期和开始日期之间有超过五天的时间,则这是一个新的安置。如果是新型寄养,那就是新安置。变量“持续时间”是应该如何计算的。

我尝试了以下代码,但它不能以正确的方式工作 + 我不知道如何应用我的“五天”规则。

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;

任何帮助深表感谢!

标签: datesasretain

解决方案


在这里使用一堆保留语句来实现这一点:

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;

(假设 type 和 id 在这里是数字。ed 是 end_date,sd 是 start_date)


推荐阅读