You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 00:26:03