Sas 按行累加

Sas 按行累加,sas,data-manipulation,Sas,Data Manipulation,对于以下数据集 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),依此类推 考虑与proc sql相关的聚合子查询: proc sql; create table cumsum as (select sup.x, sup.y, (select sum(sub.

对于以下数据集

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),依此类推

考虑与
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

考虑with
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