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

如何在SAS Proc SQL中批量定义SUM函数参数实现增量汇总?

解决方案

方法1:使用SAS宏自动生成SUM语句

通过宏循环自动生成所有sum(cmrN) as bads_N语句,无需手动逐个编写,还能灵活扩展变量数量:

%let var_count = 4; /* 这里指定cmr变量的数量,比如要扩展到cmr10就改成10 */

proc sql;
create table summary_cmr as 
select distinct reporting_date
    %do i = 1 %to &var_count;
        , sum(cmr&i) as bads_&i
    %end;
from have
group by 1;
quit;

方法2:使用PROC SUMMARY批量汇总再转置

利用PROC SUMMARY的分组汇总功能批量处理cmr变量,再通过PROC TRANSPOSE转成目标宽表:

/* 第一步:批量计算每个cmr变量的分组和 */
proc summary data=have nway;
    class reporting_date;
    var cmr1-cmr4; /* 指定要汇总的变量范围 */
    output out=sum_temp sum=;
run;

/* 第二步:转置为目标格式 */
proc transpose data=sum_temp out=summary_cmr (drop=_name_) prefix=bads_;
    by reporting_date;
    var cmr1-cmr4;
run;

方法3:数据步结合数组实现分组求和

在数据步中用数组遍历cmr变量,按reporting_date分组累加求和,最后输出宽表:

proc sort data=have;
    by reporting_date;
run;

data summary_cmr;
    set have;
    by reporting_date;
    array cmr[4] cmr1-cmr4;
    array bads[4] bads_1-bads_4;
    /* 分组初始化累加变量 */
    if first.reporting_date then do;
        do i=1 to 4;
            bads[i] = 0;
        end;
    end;
    /* 累加求和 */
    do i=1 to 4;
        bads[i] + cmr[i];
    end;
    /* 仅保留每组最后一条汇总记录 */
    if last.reporting_date then output;
    keep reporting_date bads_1-bads_4;
run;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 12:47:11