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

在SAS中按id计算基于column_a-column_b的累计余额

按ID分组计算SAS数据集的累计余额

原始数据集

idcolumn_acolumn_b
1108
171
1010
288
2101
2100

需求说明

按id分组,逐行累加column_a - column_b的结果,生成balance列,期望输出如下:

期望输出数据集

idcolumn_acolumn_bbalance
11082
1718
1010-2
2880
21019
210019

解决方案

方法1:DATA步(推荐,适配逐行处理场景)

若原始数据集已按id排序,直接执行以下代码:

data final_data;
    set original_data;
    by id;
    /* 每个id组的第一行初始化余额为0 */
    if first.id then balance = 0;
    /* 逐行累加(column_a - column_b)的结果 */
    balance + (column_a - column_b);
run;

如果原始数据集未按id排序,需先完成排序:

proc sort data=original_data;
    by id;
run;

方法2:PROC SQL窗口函数(SAS 9.2及以上版本支持)

借助窗口函数直接计算分组累计和:

proc sql;
    create table final_data as
    select id, column_a, column_b,
           sum(column_a - column_b) over (partition by id order by monotonic()) as balance
    from original_data;
quit;

monotonic()函数用于确保按原始数据行顺序累加,若数据已有明确排序字段,可替换为对应字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 09:05:29