如何在SAS中按患者保留变量首次观测并标记后续事件
SAS保留患者首次诊断记录的实现方案
核心思路
按患者ID分组,结合诊断日期的先后顺序,对每个生长状况诊断变量,仅保留首次出现有效诊断标记的记录,后续同一诊断的标记统一设为0(或.,可按需调整)。
步骤1:排序数据集
首先确保数据集按患者ID和诊断日期升序排列,保证处理顺序为时间先后:
proc sort data=original_data; by id diag_date; run;
步骤2:DATA步批量处理诊断变量
利用数组和RETAIN语句批量处理多个诊断变量,避免重复代码:
data cleaned_data; set original_data; by id; * 替换为实际的生长状况诊断变量名; array growth_diag[*] growth_status1 growth_status2 growth_status3; * 定义临时数组,跟踪每个诊断是否已记录首次出现; array first_occur[*] _first1 _first2 _first3; retain _first1 _first2 _first3 0; * 每个患者的第一条记录,重置临时跟踪变量; if first.id then do; do i = 1 to dim(first_occur); first_occur[i] = 0; end; end; * 遍历所有诊断变量; do i = 1 to dim(growth_diag); * 判断当前记录是否为有效诊断标记(根据实际标记规则调整,比如非0/非缺失); if growth_diag[i] ne 0 and growth_diag[i] ne . then do; if first_occur[i] = 0 then do; * 首次诊断,保留标记,更新跟踪状态; first_occur[i] = 1; end; else do; * 后续同一诊断,标记设为0(可替换为.); growth_diag[i] = 0; end; end; end; * 删除临时变量; drop i _first1 _first2 _first3; run;
适配调整说明
- 如果诊断变量是字符型(比如用
Y表示确诊),只需修改判断条件为if growth_diag[i] = 'Y',后续标记设为'N'或.即可。 - 数组中的变量名需替换为你实际数据集里的生长状况诊断变量,数量可根据实际情况调整。
内容的提问来源于stack exchange,提问作者lost_in_sas
相关产品推荐
相关产品推荐

