SAS在数据集末尾新增带指定计算公式合计行的问题咨询
问题描述

现有一个名为A的SAS数据集,需创建新数据集:保留原表所有数据不变,在表格末尾新增一行名称为“Total”的记录,该行对应数值按公式(A+BB+ES)-(BD+L+S)计算。
最终效果需和附件截图一致,新增的Total行计算结果为32,计算逻辑为上述公式。
目前已编写的代码如下:
proc sql; create table A as select 'Total' as Name from A union select * from A; quit

解决方案
方案1:数据步实现(逻辑直观,推荐优先使用)
data new_A; set A end=last_obs; output; /* 读取完原表所有行后插入汇总行 */ if last_obs then do; Name = 'Total'; /* 替换为实际的数值列名,多列计算可补充对应赋值语句 */ result = (sum(A, BB, ES)) - (sum(BD, L, S)); output; end; run;
该方案不会修改原有数据集A,生成的新数据集new_A完全符合需求,原有行顺序不变,汇总行在末尾。
方案2:PROC SQL实现
proc sql; create table new_A as select * from A union all select 'Total' as Name length=10, (sum(A) + sum(BB) + sum(ES)) - (sum(BD) + sum(L) + sum(S)) as result from A; quit;
注意使用
union all而非union,避免SQL自动去重、排序打乱原有行的顺序,同时性能更优。
内容的提问来源于stack exchange,提问作者Taffies1
相关产品推荐
相关产品推荐

