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

如何在SAS中按缺失值连续分组生成序号列并保持原有排序?

SAS数据集新增连续分组标记列seq的实现方法

需求说明:现有按name和visit排序的SAS数据集,需新增一列seq,标记规则为:

  • 第一组连续非缺失aval值标记为1
  • 第一组连续缺失aval值标记为2
  • 第二组连续非缺失aval值标记为3
  • 以此类推,每组连续相同缺失状态的行使用同一个seq值,状态切换时seq递增

原数据集代码

data test;
  input name $ visit $ aval;
  cards;
  A101 w1 10
  A101 w2 15
  A101 w3 18
  A101 w4  .
  A101 w5 45
  A101 w6 50
  A101 w7 .
  A101 w8 89
  A101 w9 20
  A101 w10 19
  ;
run;

实现代码

data test1;
  set test;
  retain prev_missing seq;
  curr_missing = missing(aval);
  if _N_ = 1 then do;
    seq = 1;
    prev_missing = curr_missing;
  end;
  else do;
    if curr_missing ne prev_missing then do;
      seq + 1;
      prev_missing = curr_missing;
    end;
  end;
  drop prev_missing curr_missing;
run;

代码逻辑说明

  • 使用retain语句保留上一行的缺失状态(prev_missing)和当前seq值,避免每次循环重置变量
  • 用missing(aval)函数判断当前行aval是否缺失,生成curr_missing标记(1=缺失,0=非缺失)
  • 第一行初始化seq为1,并记录当前缺失状态
  • 后续行若当前缺失状态与上一行不同,则seq加1,同时更新prev_missing为当前状态
  • 最后删除中间变量prev_missing和curr_missing,只保留所需列

期望输出数据集

data test1;
  input name $ visit $ aval seq;
  cards;
  A101 w1 10 1
  A101 w2 15 1
  A101 w3 18 1
  A101 w4  . 2
  A101 w5 45 3
  A101 w6 50 3
  A101 w7 . 4
  A101 w8 89 5
  A101 w9 20 5
  A101 w10 19 5
  ;
run;

内容的提问来源于stack exchange,提问作者Akhila Varghese

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 14:38:13