1

我需要一列作为观察。

Input Dataset           Output Dataset
-------------           --------------
data input;             Name    Mark
input name$ mark;       a       10
datalines;              b       20
a 10                    c       30
b 20                    Total   60
c 30
;
run;

我编写的以下代码运行良好。

data output;
  set input end=eof;
  tot + mark;
  if eof then
  do;
    output;
    name = 'Total';
    mark = tot;
    output;
  end;
  else output;
run;

请建议是否有更好的方法来做到这一点。

4

2 回答 2

2

PROC REPORT 是一个很好的解决方案。这总结了整个报告 - 其他选项使您能够分组总结。

proc report out=outds data=input nowd;
columns name mark;
define name/group;
define mark/analysis sum;
compute after;
  name = "Total";
  line "Total" mark.sum;
endcomp;
run;
于 2013-09-06T13:40:03.153 回答
1

您的代码一般都很好,但问题可能在于性能。如果输入表很大,你最终会重写整个表。

我建议这样的事情:

proc sql;
delete from input where name = 'Total';
create table total as
select 'Total' as name length=8, sum(mark) as mark
from input
;
quit;

proc append base=input data=total;
run;

在这里,您正在阅读完整的表格,但仅将一行写入现有表格。

于 2013-09-06T10:22:23.757 回答