如何基于患者历史发病记录更新SAS数据集的new_morbidity字段?
SAS实现new_morbidity字段生成方案
核心思路
要满足需求,关键是按ID分组并按入院时间排序,确保同一患者的住院记录按时间先后处理,再通过保留变量跟踪该患者是否已有过发病记录。
分步代码实现
- 排序数据集
先对原数据集按ID和Admission(入院日期)排序,保证同一ID的记录按入院时间从早到晚排列:
proc sort data=DB out=DB_sorted; by ID Admission; run;
- 生成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
相关产品推荐
相关产品推荐

