如何在SAS中计算同一ID下连续就诊日期的间隔天数?
计算SAS数据集中同一ID连续就诊的间隔天数
要实现需求,需先确保数据按ID和就诊日期排序,再通过BY分组结合变量留存/滞后函数计算间隔天数,以下是具体步骤:
步骤1:排序数据集
首先按ID和visit_dt排序,保证同一ID下的就诊记录按时间顺序排列:
proc sort data=test; by ID visit_dt; run;
步骤2:计算连续就诊间隔天数
方法1:使用RETAIN变量(分组处理更稳妥)
通过RETAIN留存上一条记录的就诊日期,在每个ID的第一条记录时重置变量,后续记录计算日期差:
data test_with_interval; set test; by ID; retain prev_visit_dt; /* 留存上一次就诊日期 */ if first.ID then do; interval_days = .; /* 每个ID的第一条记录无前置就诊,间隔设为缺失 */ prev_visit_dt = visit_dt; end; else do; interval_days = visit_dt - prev_visit_dt; /* 计算间隔天数 */ prev_visit_dt = visit_dt; /* 更新留存的日期 */ end; drop prev_visit_dt; /* 移除临时变量 */ run;
方法2:使用LAG函数(写法简洁)
利用LAG函数直接获取上一条记录的就诊日期,结合BY分组判断是否为ID的第一条记录:
data test_with_interval; set test; by ID; if not first.ID then do; interval_days = visit_dt - lag(visit_dt); end; else interval_days = .; /* 第一条记录间隔设为缺失 */ run;
结果验证
处理后的数据集中,interval_days变量会存储相邻就诊的间隔天数:
- ID=1的第二条记录(10-18-2021)的
interval_days为126,符合需求; - 每个ID的第一条记录
interval_days为缺失值,合理反映无前置就诊的情况。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

