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

如何用SAS实现按ID分组后取最高金额对应order_type并汇总字段

SAS实现分组汇总并取最大值对应字段的方案

实现逻辑

按ID分组后需要完成两类计算:

  • amt、no_of_order字段按组求和
  • 同组内按amt降序排序,取第一行的order_type作为该组的取值

参考代码

方法1:PROC SQL实现(代码简洁易读,适合中小数据量)

/* 1. 构造测试数据集 */
data test;
    input ID amt order_type $ no_of_order;
    datalines;
1  200  em  6
1  300  on  5
2  600  em  10
;
run;

/* 2. 核心计算 */
proc sql;
    create table output as
    select 
        ID,
        sum(amt) as amt format=best12.,
        (select order_type from test b where a.ID = b.ID having b.amt = max(b.amt)) as order_type $,
        sum(no_of_order) as no_of_order format=best12.
    from test a
    group by ID;
quit;

方法2:Data步DoW循环实现(仅遍历一次数据,适合大数据量高性能场景)

data output2;
    length order_type $2;
    sum_amt = 0;
    sum_no = 0;
    max_amt = -1;
    do until(last.ID);
        set test;
        by ID;
        sum_amt + amt;
        sum_no + no_of_order;
        if amt > max_amt then do;
            max_amt = amt;
            order_type = order_type;
        end;
    end;
    amt = sum_amt;
    no_of_order = sum_no;
    keep ID amt order_type no_of_order;
run;

两种方法运行后得到的结果均和给出的期望输出一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:18:01