0

我有以下 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
4

2 回答 2

1

我会将小计总和存储在一个新变量中,并显示它而不是自动汇总。这似乎是显示它的最简单方法。我不知道在自动总结期间有一种简单的方法可以让它发生 - SAS 并不完全期望你按照上面的方式做事(老实说,我很惊讶它的工作原理) .

于 2014-07-11T15:07:38.663 回答
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;
于 2014-07-15T14:22:44.110 回答