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

如何在SAS中按两个及以上分组保留变量值?

SAS多分组下变量值的向后填充实现

需要按Group_A和Group_B两个分组,将每个分组内按日期排序后的Val非缺失值向后传递,覆盖后续的缺失值,得到连续的有效值。以下是具体实现方案:

步骤1:对数据集按分组和日期排序

先确保每个分组内的观测按时间顺序排列,这是分组处理的前提:

proc sort data=have;
    by Group_A Group_B mydate;
run;

步骤2:使用DATA步实现多分组填充

结合BY分组语句和RETAIN变量,完成非缺失值的向后传递:

data want;
    set have;
    by Group_A Group_B;
    retain retain_val;
    /* 进入新分组时重置临时变量,保证分组独立处理 */
    if first.Group_B then retain_val = .;
    /* 更新临时变量为当前非缺失的Val值 */
    if not missing(Val) then retain_val = Val;
    /* 用最近有效值填充缺失值,非缺失值保持原样 */
    Val = coalesce(Val, retain_val);
    drop retain_val; /* 删除临时变量 */
run;

关键逻辑说明

  • by Group_A Group_B:指定双分组维度,first.Group_B会在Group_A或Group_B发生变化时触发,此时重置临时变量,确保每个分组的填充互不干扰。
  • retain retain_val:让临时变量跨观测保留值,实现非缺失值的向后传递。
  • coalesce(Val, retain_val):优先保留当前Val的非缺失值,若缺失则使用retain_val存储的最近有效值,完全匹配需求中的输出效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 21:17:37