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

如何在SAS中保留每个患者首个Index=1的记录并将其余设为缺失?

SAS数据处理:保留每个患者第一条Index=1记录,其余设为缺失

现有SAS数据集DB包含ID、Admission、Discharge、Index字段,部分患者存在多条Index=1的记录。需生成数据集DB1,要求每个患者仅保留第一条Index=1的记录,其余同患者的Index=1设为缺失,非1的Index值保持不变。

解决方案代码

/* 按ID和入院日期排序,确保记录顺序符合业务逻辑(若需按原始输入顺序判断"第一条",可改为仅按ID排序) */
proc sort data=DB;
    by ID Admission;
run;

/* 生成目标数据集DB1 */
data DB1;
    set DB;
    by ID;
    retain first_index_flag 0; /* 临时标记:是否已找到当前ID的第一条Index=1 */
    
    /* 每个ID的第一条记录初始化标记 */
    if first.ID then first_index_flag = 0;
    
    /* 仅处理Index=1的记录 */
    if Index = 1 then do;
        if first_index_flag = 0 then do;
            first_index_flag = 1; /* 标记已找到第一条Index=1,保留原值 */
        end;
        else do;
            Index = .; /* 后续的Index=1设为缺失 */
        end;
    end;
    
    drop first_index_flag; /* 删除临时变量,避免输出数据集冗余 */
run;

代码逻辑说明

  1. 排序处理:通过proc sort按ID和Admission排序,确保每个患者的记录按入院时间先后排列,保证第一条Index=1是该患者最早的对应记录;若业务上需要按原始输入顺序判断“第一条”,可修改排序语句为by ID;。
  2. BY组标记:利用by ID分组,通过first.ID识别每个患者的起始记录,重置临时标记变量。
  3. 值修正:用retain语句维持标记变量的状态,遇到Index=1时,根据标记判断是否为第一条记录:是则保留值,否则设为缺失;非Index=1的记录保持原有值不变。

输入数据集DB示例

data DB;
  input ID :$20. Admission :date09. Discharge :date09. Index; 
  format Admission date9. Discharge date9.;
cards;
0001 13JAN2015 20JAN2015 1
0001 21FEB2015 31DEC2015 1
0001 01MAR2018 30SEP2018 .
0002 01JAN2015 31MAR2015 1
0002 01MAY2015 31OCT2015 1
0003 08FEB2014 10MAR2014 1
0004 04MAY2016 10MAY2016 1 
0004 13JUN2016 15NOV2016 1
0004 09DEC2016 31DEC2016 1
;

期望输出数据集DB1示例

data DB1;
  input ID :$20. Admission :date09. Discharge :date09. Index; 
  format Admission date9. Discharge date9.;
cards;
0001 13JAN2015 20JAN2015 1
0001 21FEB2015 31DEC2015 .
0001 01MAR2018 30SEP2018 .
0002 01JAN2015 31MAR2015 1
0002 01MAY2015 31OCT2015 .
0003 08FEB2014 10MAR2014 1
0004 04MAY2016 10MAY2016 1 
0004 13JUN2016 15NOV2016 .
0004 09DEC2016 31DEC2016 .
;

内容的提问来源于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.16 02:13:28