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

SAS数据处理:按ID与重复日期根据Variable1设置Index值

SAS数据处理:按ID分组调整重复日期的Index值

现有数据集(have)

data have;
  input ID :$20. Date :date09. Variable1 Variable2 Index; 
  format Date date9.;
cards;
0001 22JAN2020 1  0  33
0001 13FEB2020 .  .  .
0001 13FEB2020 0  1  22
0001 03OCT2021 .  .  .
0002 02SEP2014 0  1  1
0002 10OCT2014 .  .  .
0002 10OCT2014 1  0  13
;

期望输出数据集(want)

data want;
  input ID :$20. Date :date09. Variable1 Variable2 Index; 
  format Date date9.;
cards;
0001 22JAN2020 1  0  33
0001 13FEB2020 .  .  .
0001 13FEB2020 0  1  .
0001 03OCT2021 .  .  .
0002 02SEP2014 0  1  1
0002 10OCT2014 .  .  .
0002 10OCT2014 1  0  .
;

处理规则

  • 按ID分组处理
  • 当同一ID下存在重复Date时,若该日期的前一行中Variable1值缺失,则将该日期的下一行的Index值设为缺失

实现代码

data want;
  set have;
  by ID Date;
  /* 保留前一行的Variable1值 */
  retain prev_var1;
  /* 新ID组起始时重置前一行变量 */
  if first.ID then prev_var1 = .;
  
  /* 判断当前行是否为重复日期的后续行,且前一行Variable1缺失 */
  if not first.Date and prev_var1 = . then Index = .;
  
  /* 更新前一行Variable1为当前行的值,供下一行判断使用 */
  prev_var1 = Variable1;
run;

代码逻辑说明

  1. 使用by ID Date按ID和日期分组,借助first.标识符识别分组起始位置
  2. 用retain语句保留上一行的Variable1值,避免每次循环自动重置
  3. 进入新的ID组时,重置prev_var1为缺失,保证分组间判断独立
  4. 若当前行不是该日期的第一行(即重复日期的后续行),且前一行Variable1缺失,则将当前行Index设为缺失
  5. 每次循环结束前更新prev_var1为当前行的Variable1值,为下一行判断提供依据

内容的提问来源于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.15 04:40:14