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

如何基于患者历史发病记录更新SAS数据集的new_morbidity字段?

SAS实现new_morbidity字段生成方案

核心思路

要满足需求,关键是按ID分组并按入院时间排序,确保同一患者的住院记录按时间先后处理,再通过保留变量跟踪该患者是否已有过发病记录。

分步代码实现

  1. 排序数据集
    先对原数据集按ID和Admission(入院日期)排序,保证同一ID的记录按入院时间从早到晚排列:
proc sort data=DB out=DB_sorted;
    by ID Admission;
run;
  1. 生成new_morbidity字段
    使用Data步分组处理,通过保留变量记录患者是否已有发病历史:
data DB1;
    set DB_sorted;
    by ID;
    * 每个ID组的第一条记录初始化发病标记;
    if first.ID then has_morbidity = 0;
    * 判断当前及历史是否有发病记录;
    if morbidity = 1 or has_morbidity = 1 then do;
        new_morbidity = 1;
        has_morbidity = 1;
    end;
    else new_morbidity = morbidity;
    * 保留标记变量用于后续记录判断;
    retain has_morbidity;
    * 删除中间变量(可选);
    drop has_morbidity;
run;

代码逻辑说明

  • by ID实现分组处理,first.ID用于识别每个患者的第一条住院记录,此时重置has_morbidity为0,表示该患者尚未有发病记录。
  • retain语句让has_morbidity的值在同一ID的后续记录中持续保留,不会被自动重置为缺失。
  • 每次处理记录时,只要当前住院发病,或之前已有过发病记录,new_morbidity就设为1;否则保持原morbidity的值。

内容的提问来源于stack exchange,提问作者NewUsr_stat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:46:02