我的数据集如下所示:
Name Number
a 1
b 2
c 9
d 6
e 5.5
Total ???
我想计算变量Number
的总和,并记录最后一行的总和(对应于Name ='total')。我知道我可以使用proc方法执行此操作然后将输出合并回此文件。但这似乎不是很有效。谁能告诉我有没有更好的方法呢。
答案 0 :(得分:4)
您可以在数据集中执行以下操作:
data test2;
drop sum;
set test end = last;
retain sum;
if _n_ = 1 then sum = 0;
sum = sum + number;
output;
if last then do;
NAME = 'TOTAL';
number = sum;
output;
end;
run;
只需一次通过数据集
答案 1 :(得分:1)
以下代码使用DOW-Loop(DO-Whitlock)通过读取一次观察结果,输出每一个,然后最后输出总数来实现结果:
data want(drop=tot);
do until(lastrec);
set have end=lastrec;
tot+number;
output;
end;
name='Total';
number=tot;
output;
run;
此致 阿米尔。
答案 2 :(得分:1)
通过报告程序很容易获得。
data have;
input Name $ Number ;
cards;
a 1
b 2
c 9
d 6
e 5.5
;
proc report data=have out=want(drop=_:);
rbreak after/ summarize ;
compute after;
name='Total';
endcomp;
run;
答案 3 :(得分:0)
对于所提供的所有数据步骤解决方案,请务必牢记“长度”和“长度”。因子。确保它能同时满足' Total'和原始值。
proc sql;
select max(5,length) into :len trimmed from dictionary.columns WHERE LIBNAME='WORK' AND MEMNAME='TEST' AND UPCASE(NAME)='NAME';
QUIT;
data test2;
length name $ &len;
set test end=last;
...
run;