对于每个组,我有以下proc报告,其中我将采用小计行并从中减去1。因此,对于下面列出的示例报告,第一组实际上具有2的小计,但是我将其显示为1。这部分工作正常。
我的问题在于Grand Total系列。我需要它是所有小计行的摘要,但它总结了Count列中的所有数据。例如,下面的报告显示5,但我需要它显示3.我不知道如何实现这一目标。任何帮助将不胜感激......
代码:
proc report data = mnr_ct missing nowindows;
columns first_last
maj
mnr
count
;
define first_last / group
style(header)={font=('calibri',10pt,bold) just=c}
style(column)={font=('calibri',10pt) just=c cellwidth=2.0in};
define maj / display
style(header)={font=('calibri',10pt,bold) just=c}
style(column)={font=('calibri',10pt) just=c cellwidth=1.0in};
define mnr / display
style(header)={font=('calibri',10pt,bold) just=c}
style(column)={font=('calibri',10pt) just=c cellwidth=1.0in};
define count / analysis sum
style(header)={font=('calibri',10pt,bold) just=c}
style(column)={font=('calibri',10pt) just=c cellwidth=1.0in};
break after first_last / summarize style=[foreground=black just=c font=('calibri',10pt,bold)];
compute after first_last / style=[background=light grey];
line ' ';
endcomp;
compute count;
if _break_ = 'FIRST_LAST' then
count.sum = count.sum -1;
endcomp;
rbreak after / summarize style=[foreground=black just=c font=('calibri',10pt,bold)];
compute first_last;
if _break_ = 'FIRST_LAST' then
first_last = 'SUBTOTAL';
else if _break_ = '_RBREAK_' then
first_last = 'GRAND TOTAL';
endcomp;
title;
run;
示例报告:
first_last maj min count
something1 aaaaaaa bb 1
aaaaaaa cc 1
subtotal 1
something2 bbbbbbb bb 1
bbbbbbb cc 1
bbbbbbb dd 1
subtotal 2
grand total 5
答案 0 :(得分:1)
我会将小计和存储在一个新变量中,并显示该变量而不是自动摘要。这似乎是最简单的显示方式。我不知道在自动摘要期间有一种简单的方法可以让它发生 - SAS并不完全期望你按照上面的方式做事(我很惊讶它的工作原理,老实说)
答案 1 :(得分:0)
通过计算obs的数量并从总数中减去它来解决这个问题。
proc report data = mnr missing nowindows;
columns first_last
maj
mnr
count
obs
gt
;
define first_last / group
style(header)={font=('calibri',10pt,bold) just=c}
style(column)={font=('calibri',10pt) just=c cellwidth=2.0in};
define maj / display
style(header)={font=('calibri',10pt,bold) just=c}
style(column)={font=('calibri',10pt) just=c cellwidth=1.0in};
define mnr / display
style(header)={font=('calibri',10pt,bold) just=c}
style(column)={font=('calibri',10pt) just=c cellwidth=1.0in};
define count / analysis sum
style(header)={font=('calibri',10pt,bold) just=c}
style(column)={font=('calibri',10pt) just=c cellwidth=1.0in};
define obs / computed noprint;
define gt / computed noprint;
break after first_last / summarize style=[foreground=black just=c font=('calibri',10pt,bold)];
compute after first_last / style=[background=light grey];
line ' ';
endcomp;
compute count;
if _break_ = 'FIRST_LAST' then
count.sum = count.sum - 1;
endcomp;
compute first_last;
if _break_ = 'FIRST_LAST' then
first_last = 'SUBTOTAL';
endcomp;
compute obs;
if _break_ = 'FIRST_LAST' then
count+1;
obs=count;
endcomp;
compute gt;
gt = count.sum - obs;
endcomp;
compute after / style=[just=r font=('calibri',10pt,bold)];
line 'GRAND TOTAL' gt;
endcomp;
title;
run;