【问题标题】:Cumulative sum by row逐行累计
【发布时间】:2016-06-25 20:32:01
【问题描述】:

对于以下数据集

data example;
input x y;
cards;
1 8
2 7
3 6
4 5
;
run;

我想创建一个添加了以下列的新数据集:

sum 
10 
9 
7 
4

10 来自对第一列 (1+2+3+4) 求和,9 来自 (2+3+4),依此类推。

【问题讨论】:

    标签: sas data-manipulation


    【解决方案1】:

    考虑proc sql 中的相关聚合子查询:

    proc sql;
        create table cumsum as
        (select sup.x, sup.y,
              (select sum(sub.x) from example as sub where sub.x >= sup.x) as sum 
         from example as sup);
    quit;
    
    x   y   sum
    1   8   10
    2   7   9
    3   6   7
    4   5   4
    

    或者,您可以通过数据步骤运行累积和。由于您需要递减的累积和,因此需要先排序和后排序:

    proc sort data=example out=example;
        by descending x;
    run;
    
    data cumsum2;
      set example;
      if first.x then sum = 0;
      sum + x;    
    run;
    
    proc sort data=cumsum2 out=cumsum2;
        by x;
    run;
    
    x   y   sum
    1   8   10
    2   7   9
    3   6   7
    4   5   4
    

    【讨论】:

      猜你喜欢
      • 2018-04-09
      • 1970-01-01
      • 2021-12-22
      • 2015-12-07
      • 2018-01-14
      • 2021-07-24
      • 2017-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多