date - 使用 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;
任何帮助深表感谢!
解决方案
在这里使用一堆保留语句来实现这一点:
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)
推荐阅读
- java - 如何在java中读取小数形式的jsonobjects?
- java - 迭代时移除元素。removeIf 导致 ConcurrentModificationException
- r - 如何在 R Markdown 的表格正文中显示希腊字母?
- python - 使用 BeautifulSoup4 设置 XML 属性值
- reporting-services - 是否可以从 SSRS 报告数据中找到所有匹配的字符串?
- unity3d - 在 Unity 2D 中移动时从对撞机上落下的 2d 刚体
- entity-framework - Linq 获取每个 Make into DTO 的模型列表
- amazon-web-services - 对于 col_a 中的每个不同值,生成一个新表
- javascript - 如何在javascript中将对象插入数组?
- node.js - 如何在 nodejs express mongodb 中使用多查询