【问题标题】:Cumulative sum in multiple columns in SASSAS中多列的累积和
【发布时间】:2015-06-30 04:11:07
【问题描述】:

我一直在寻找解决方案,但在社区的 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
...................
...................

我可以选择hard way,比如在一个循环中描述26个变量中的每一个,然后我可以通过B找到累积和。但是我想在不描述所有变量的情况下找到一个更实际的解决方案。

在其中一个网站上提出了这样的解决方案:

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

我不确定 Proc Sort 中是否有类似“Weight”的选项,但如果它有效,那么我想也许我可以通过放置 numeric 而不是 Var1 来修改它,然后是 Proc排序过程可以对所有数值进行处理:

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

有什么想法吗?

【问题讨论】:

  • 根据您发布的输入数据,您能否添加所需输出的样本?我不确定我是否理解您的目标。
  • @DWal 我刚刚编辑了我的问题。额外的解释和我的目标(结果表)
  • 如果您有 SAS ETS,您可以查看 proc expand

标签: sas


【解决方案1】:

实现此目的的一种方法是使用 2 个“平行”数组,一个用于输入值,另一个用于累积值。

%LET N = 26 ; 数据暨; 设置有; 由 A B ; 数组 v{*} var1-var&N ; 数组 c{*] cum1-cum&N ; 保留 c 。 ; if first.A then call missing(of c{*}) ; /* 重置 A 的新值 */ 做 i = 1 到 &N ; c{i} + v{i} ; 结尾 ; 放下我; 跑 ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多