如何在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
相关产品推荐
相关产品推荐

