PROC报告,具有相同统计数据的多个列

时间:2016-05-18 17:30:16

标签: sas proc-report

我正在使用PROC REPORT生成加权总和的报告。有两列需要汇总,均使用MEAN统计信息。最重要的是,我想输出总重量。

我有2个问题。

  1. 我似乎无法获得每笔金额的标题以反映变量 总结。

  2. 我需要为每列提供不同的格式。

  3. 以下是一些示例数据:

    data test;
    format lev1-lev3 $3. weight percent10.2 duration 6.2 convexity 6.4;
    informat weight percent10.2 duration  6.2 convexity 6.4;
    input lev1  lev2    lev3    weight  duration convexity;
    datalines;
    A   C   H   16.11%  3.21 0.6182
    A   C   I   3.83%   9.06 1.2244
    A   D   J   7.67%   2.21 3.4010
    A   D   K   16.90%  3.98 0.0303
    B   E   L   2.68%   1.88 1.9515
    B   E   M   16.68%  4.36 3.1851
    B   F   N   20.79%  2.64 0.1145
    B   F   O   15.34%  5.55 2.4408
    ;
    run;
    

    我尝试了很多方法来定义PROC REPORT中的内容。这是众多的一个:

    proc report data=test nowd out=report;
    column lev1 lev2 lev3 duration,(SUMWGT MEAN) convexity,(Mean);
    weight weight;
    define lev1 / group;
    define lev2 / group;
    define lev3 / group;
    define duration / 'Duration' ;
    define sumwgt / 'Weight' format=percent10.2;
    define mean / '' format=6.2;
    define convexity / 'Convexity';
    *define mean / 'Convexity' format=6.4;
    
    break before lev1 / summarize ;
    break before lev2 / summarize ;
    rbreak before / summarize;
    run;
    

    我的最终目标是:

    Lev1 Lev2 Lev3 Weight    Duration Convextiy
                   100.00%   3.88     1.3943
    A               44.51%   3.83     0.9267
    ...
    

    我也玩PROC TABULATE,但我不太喜欢它所呈现的牌桌。

    示例TABULATE混乱:

    PROC TABULATE DATA=WORK.test;   
        VAR duration convexity;
        CLASS LEV1 /    ORDER=UNFORMATTED MISSING;
        CLASS LEV2 /    ORDER=UNFORMATTED MISSING;
        CLASS LEV3 /    ORDER=UNFORMATTED MISSING;
    
    TABLE 
    /* Row Dimension */
    ALL={LABEL="+"}
    LEV1*(
      ALL={LABEL="+"}
      LEV2*(
        ALL={LABEL="+"}
        LEV3 ) )
    ,
    
    /* Column Dimension */
    duration={LABEL="Weight"}*SumWgt={LABEL=""}*f=percent10.2 
    duration={LABEL="Duration"}*Mean={LABEL=""}*f=6.2   
    convexity={LABEL="Convexity"}*Mean={LABEL=""}*f=6.4;
    
    WEIGHT weight;
    
    RUN;
    

1 个答案:

答案 0 :(得分:1)

我认为您将面临完全您想要的PROC REPORT的挑战。也许Cynthia @ SAS可以解决这个问题,但我不知道,但特别是对行标题的处理将极具挑战性。

我建议预处理方法(使用PROC MEANS或类似方法),然后报告该结果。很容易做到。

这可能接近你想要的,例如:

proc means data=test;
class lev1 lev2 lev3;
var duration convexity;
weight weight;
types () lev1 lev1*lev2 lev1*lev2*lev3;
output out=test_out
  sumwgt(duration)=sumwgt mean(duration)= mean(convexity)=;
run;


proc report data=test_out;
 columns lev1-lev3 sumwgt duration convexity;
 define lev1/order missing;
 define lev2/order missing;
 define lev3/order missing;
 define sumwgt/display format=percent9.2;
 define duration/display format=6.2;
 define convexity/display format=6.4;
run;