SAS如何实现分组内指定变量变化时计数变量自增
问题背景
需要按2个变量(User、Var)分组执行proc sql计算分组均值,直接使用group by语法无法得到预期结果,所用数据已提前完成排序,预期输出效果如下:
经排查,均值函数的原生运行逻辑无法直接满足需求,只要生成分组内随目标变量X变化自动递增的计数变量即可解决该问题,预期计数变量效果如下:
已尝试的无效代码
最初编写的计数变量生成代码运行后无法实现预期效果,代码如下:
data want; set have; count + 1; by User Var X; if first.User then count = 1; run;
错误原因
原有代码存在两处逻辑问题:
- 计数重置条件不全:仅在遇到新
User时重置计数,未考虑同一User下不同Var属于独立分组,会导致跨Var的计数连续累加 - 计数累加逻辑错误:设置为每行都自动加1,会导致同一
X值的多行记录计数持续递增,不符合“仅当目标变量X变化时才递增计数”的要求
可行解决方案
确保输入数据集已按User Var X顺序排序(已提前完成排序可跳过该步骤),使用以下代码即可生成符合要求的计数变量:
data want; set have; by User Var X; /* 进入新的User+Var分组时,计数重置为1 */ if first.Var then count = 1; /* 同一分组内X值发生变化时,计数+1 */ else if first.X then count + 1; /* 同一X值的所有行保持计数不变,无需额外操作 */ run;
生成符合要求的计数变量后,再基于该变量做后续分组均值计算即可得到预期结果。
内容的提问来源于stack exchange,提问作者Thomas Sere
相关产品推荐
相关产品推荐

