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

如何在SAS中对同一列指定两行数值求和并合并行

SAS中用RETAIN语句实现指定行求和合并

RETAIN语句完全适用于这个场景,不用转置全量数据,仅需一次遍历数据集就能完成需求。以下是具体实现方案:

步骤1:确保数据集按分组变量排序

如果原数据集未按Sample和Matrix排序,先执行排序:

proc sort data=All;
    by Sample Matrix;
run;

步骤2:数据步处理(不依赖A/C顺序)

data Want;
    set All;
    by Sample Matrix;
    /* 保留求和结果和合并后的Var名称,初始化为缺失/0 */
    retain sum_ac 0 combined_var '';

    /* 每个新的Sample-Matrix组开始时,重置保留变量 */
    if first.Matrix then do;
        sum_ac = 0;
        combined_var = '';
    end;

    /* 处理A和C行:累加结果,拼接Var名称 */
    if Var in ('A', 'C') then do;
        sum_ac + Result;
        combined_var = catx('+', combined_var, Var);
    end;
    /* 非A/C行直接输出 */
    else do;
        output;
    end;

    /* 组结束时,输出合并后的行(如果存在A/C) */
    if last.Matrix and sum_ac > 0 then do;
        Var = combined_var;
        Result = sum_ac;
        output;
    end;
run;

代码说明

  • by Sample Matrix:按样本和基质分组,确保同一组内的观测连续处理。
  • retain:持续保存sum_ac(A/C的Result总和)和combined_var(合并后的Var标识),避免每次迭代重置。
  • 分组开始时重置保留变量,防止不同组的数据互相干扰。
  • 遇到A/C行时只累加值、拼接名称,不直接输出;非A/C行直接输出。
  • 组处理完成时,若存在A/C的累加值,就输出合并后的行。

这种方法仅遍历数据集一次,效率远高于转置操作,完全适配你120条观测的数据集规模。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:48:19