如何在PROC FEDSQL中按Var_A、Var_B最大值进行行断同筛选?
在PROC FEDSQL中实现分组取最大行的断同处理
需求说明
按GROUP字段分组,先筛选每组中Var_A取最大值的行;若同一分组内存在Var_A值相同的多行,则进一步筛选其中Var_B取最大值的行,最终保留GROUP和ID列。
示例输入数据
假设输入数据存储在SAS表test中,数据内容如下:
GROUP ID Var_A Var_B A 1 2 1 A 2 4 2 B 3 1 3 B 4 1 2 C 5 1 2 C 6 2 1
解决方案:使用窗口函数ROW_NUMBER()
通过窗口函数对每组数据排序并标记行号,筛选目标行是最直观的方法:
PROC FEDSQL; CREATE TABLE result AS SELECT GROUP, ID FROM ( SELECT GROUP, ID, Var_A, Var_B, -- 按GROUP分区,先按Var_A降序、再按Var_B降序排序生成行号 ROW_NUMBER() OVER (PARTITION BY GROUP ORDER BY Var_A DESC, Var_B DESC) AS rn FROM test ) t -- 筛选每个分组中排第一的行 WHERE rn = 1; QUIT;
结果验证
执行上述代码后,result表的内容与期望输出一致:
GROUP ID A 2 B 3 C 6
内容的提问来源于stack exchange,提问作者supercoolphysicist
相关产品推荐
相关产品推荐

