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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 17:30:05