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

按ID标记重复入院出院日期:为首次记录设Index=1其余设缺失值

实现SAS数据集按ID分组标记首次重复记录

原始数据集DB

data DB;
  input ID :$20. Admission :date09. Discharge :date09.; 
  format Admission date9. Discharge date9.;
cards;
0001 13JAN2017 25JAN2017 
0001 13JAN2017 25JAN2017 
0001 13JAN2017 25JAN2017
0001 11MAR2017 16MAY2017 
0001 30JAN2019 04MAR2019 
0002 11SEP2014 15SEP2014 
0002 28DEC2014 03JAN2015 
0002 28DEC2014 03JAN2015 
;
run;

目标需求与示例

要求按ID分组,每组内Admission和Discharge日期完全重复的记录,仅首次出现的记录将Index设为1,其余重复记录的Index设为缺失值,目标数据集DB1如下:

data DB1;
  input ID :$20. Admission :date09. Discharge :date09. Index; 
  format Admission date9. Discharge date9.;
cards;
0001 13JAN2017 25JAN2017 1
0001 13JAN2017 25JAN2017 .
0001 13JAN2017 25JAN2017 .
0001 11MAR2017 16MAY2017 1
0001 30JAN2019 04MAR2019 1
0002 11SEP2014 15SEP2014 1
0002 28DEC2014 03JAN2015 1
0002 28DEC2014 03JAN2015 .
;
run;

解决方案代码

步骤1:排序数据集

先将原始数据集按ID、Admission、Discharge排序,确保相同ID下的重复入院出院记录连续排列:

proc sort data=DB;
  by ID Admission Discharge;
run;

步骤2:生成目标数据集

利用SAS的BY语句自动生成的first.临时变量,标记每组的第一条记录:

data DB1;
  set DB;
  by ID Admission Discharge;
  /* 仅当前ID-Admission-Discharge组合的第一条记录设置Index为1,其余设为缺失 */
  if first.Discharge then Index = 1;
  else Index = .;
run;

代码说明

  • proc sort:将同一ID下的相同入院出院日期记录归为连续组,保证first.Discharge变量能准确识别每组的起始记录。
  • by ID Admission Discharge:SAS会自动创建first.Discharge临时变量,该变量值为1时,表示当前记录是ID-Admission-Discharge组合的第一条记录。
  • 条件赋值:通过if-else语句判断first.Discharge的值,为1时Index设为1,否则设为缺失值。也可以用条件函数简化写法:Index = ifn(first.Discharge, 1, .);

内容的提问来源于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.13 12:30:54