SAS中多列的累积和

SAS中多列的累积和,sas,Sas,我已经搜索了一段时间的解决方案,但在SAS社区中找不到任何类似的问题。这是我的问题:我有一个很大的SAS表:假设有2个类和26个变量: A B Var1 Var2 ... Var25 Var26 ----------------------------- 1 1 10 20 ... 35 30 1 2 12 24 ... 32 45 1 3 20 23 ... 24 68 2 1 13 29 ... 22 57 2 2 32 43 ... 33 65 2 3 11 76 ... 32 45 ..

我已经搜索了一段时间的解决方案,但在SAS社区中找不到任何类似的问题。这是我的问题:我有一个很大的SAS表:假设有2个类和26个变量:

A B Var1 Var2 ... Var25 Var26
-----------------------------
1 1 10 20 ... 35 30
1 2 12 24 ... 32 45
1 3 20 23 ... 24 68
2 1 13 29 ... 22 57
2 2 32 43 ... 33 65
2 3 11 76 ... 32 45
...................
...................
我需要通过Class=B计算所有26个变量的累积和,这意味着对于A=1,它将通过B=1,2,3累积;对于A=2,它将通过B=1,2,3累积。结果表如下所示:

A B Cum1 Cum2 ... Cum25 Cum26
-----------------------------
1 1 10 20 ... 35 30
1 2 22 44 ... 67 75
1 3 40 67 ... 91 143
2 1 13 29 ... 22 57
2 2 45 72 ... 55 121
2 3 56 148 .. 87 166
...................
...................
我可以选择艰难的方式,比如在一个循环中描述26个变量中的每一个,然后我可以通过B找到累积和。但是我想找到一个更实际的解决方案,而不需要描述所有的变量

在其中一个网站上,有人建议这样的解决方案:

proc sort data= (drop=percent cum_pct rename=(count=demand cum_freq=cal));
weight var1;
run;
我不确定Proc Sort中是否有类似“Weight”的选项,但如果它起作用,我想也许我可以通过将numeric替换为Var1来修改它,那么Proc Sort进程可以对所有数值执行此过程:

proc sort data= (drop=percent cum_pct rename=(count=demand cum_freq=cal));
weight _numerical_;
run;

有什么想法吗

实现这一点的一种方法是使用两个“并行”数组,一个用于输入值,另一个用于累积值

%LET N = 26 ; data cum ; set have ; by A B ; array v{*} var1-var&N ; array c{*] cum1-cum&N ; retain c . ; if first.A then call missing(of c{*}) ; /* reset on new values of A */ do i = 1 to &N ; c{i} + v{i} ; end ; drop i ; run ; %设N=26; 数据汇总; 集有; A B; 数组v{*}var1 var&N; 数组c{*]cum1 cum&N; 保留c; 如果first.A然后调用missing(c{*});/*在A的新值上重置*/ i=1到&N; c{i}+v{i}; 结束; 第一滴; 跑
根据您发布的输入数据,您可以添加所需输出的示例吗?我不确定是否理解您的目标。@DWal我刚刚编辑了我的问题。如果您有SAS ETS,您可以查看proc expand(结果表)的额外说明和我的目标