如何在sas中求行级数据之和

如何在sas中求行级数据之和,sas,Sas,我想在sas中进行行级求和 在这里,我做了CDE行的求和,并在F行中进行了计算。当条件不起作用时,我用sum case进行了检查 我试着在条件允许的情况下使用几个单独的数据集,但不起作用 比如说 Name v1 v2 v3 A 2 3 4 B 3 5 6 C 3 4 4 D 2 5 2 E 1 2 6 F 6 11 12 使用行号和union all 您也可以使用datastep执行此操作: data want; set have

我想在sas中进行行级求和

在这里,我做了CDE行的求和,并在F行中进行了计算。当条件不起作用时,我用sum case进行了检查

我试着在条件允许的情况下使用几个单独的数据集,但不起作用

比如说

Name v1 v2 v3
A    2  3  4
B    3  5  6
C    3  4  4
D    2  5  2
E    1  2  6
F    6  11 12
使用行号和union all


您也可以使用datastep执行此操作:

data want;
  set have end = lastrec;

  retain v1_sum 0;
  retain v2_sum 0;
  retain v3_sum 0;

  /* Better to use sum() than + since it deals with missing values better */

  if Name in ('C', 'D', 'E') then do;
    v1_sum = sum(v1_sum, v1);
    v2_sum = sum(v2_sum, v2);
    v3_sum = sum(v3_sum, v3);
  end;

  output;

  if lastrec then do;
    Name = "F";
    v1 = v1_sum;
    v2 = v2_sum;
    v3 = v3_sum;
    output;
  end;
  drop v1_sum v2_sum v3_sum;
run;
您可以使用Proc MEANS来聚合所需的行。然后,数据步骤可以通过SET语句来堆叠原始数据和聚合

data have; input
Name $1. v1 v2 v3; datalines;
A    2  3  4
B    3  5  6
C    3  4  4
D    2  5  2
E    1  2  6
run;

proc means data=have noprint;
  where name in ('C','D','E');
  output out=aggregate(keep=v1-v3) sum(v1-v3)=v1-v3;
run;

data want; 
  set
    have
    aggregate(in=sums)
  ;
  if sums then name = 'F';
run;

不清楚你想做什么。请展示一个示例输入数据集,并清楚地指出您想要输出的数据。请展示您尝试过的内容。如果您展示您必须开始的内容、您想要作为最终输出的内容以及您尝试过的内容,这会有所帮助。行号在SAS SQL中无效。虽然单调也行。OP只想添加特定的行,C、D和E。谢谢@Reeza。我修正了解决方案以反映这一点
data have; input
Name $1. v1 v2 v3; datalines;
A    2  3  4
B    3  5  6
C    3  4  4
D    2  5  2
E    1  2  6
run;

proc means data=have noprint;
  where name in ('C','D','E');
  output out=aggregate(keep=v1-v3) sum(v1-v3)=v1-v3;
run;

data want; 
  set
    have
    aggregate(in=sums)
  ;
  if sums then name = 'F';
run;