如何在sas中求行级数据之和
我想在sas中进行行级求和 在这里,我做了CDE行的求和,并在F行中进行了计算。当条件不起作用时,我用sum case进行了检查 我试着在条件允许的情况下使用几个单独的数据集,但不起作用 比如说如何在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
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;