PROC REPORT基础

来源:互联网 发布:老司机网络什么意思 编辑:程序博客网 时间:2024/05/18 22:11
原文地址:REPORT基础">PROC REPORT基础作者:supersasmacro

A Step-by-Step Introduction to PROC REPORT

PROC REPORT基础

原文地址:http://www2.sas.com/proceedings/forum2008/079-2008.pdf

参考文献地址:http://www2.sas.com/proceedings/sugi30/259-30.pdf

          http://www2.sas.com/proceedings/sugi30/116-31.pdf

转载请注明出处:http://blog.sina.com.cn/s/blog_5d3b177c0100bc1u.html

 

1 PROC REPORT语法

PROC REPORT  data=SAS-data-set  options ;

   COLUMNSvariable_1 …. variable_n;

   DEFINEvariable_1;

   DEFINEvariable_2;

  . . .

 DEFINE variable_n;

 COMPUTE blocks 

  BREAK … ;

  RBREAK … ; 

 RUN;

COLUMNS:指定输出到报表的列

DEFINE:上述列的格式等

COMPUTE:计算模块

BREAK / RBREAK:生成合计,或报表其它类型的格式。

 

PROC REPORT的选项Options有很多,下面介绍几个常用的:

DATA= 指定做报表的数据集

PROMPT= PROMPT模式

NOWINDOWS= 不输出到结果

REPORT = 指定一个存储的报表来生成新报表

OUTREPT= 指定新路径来存放报表

OUT=  建立新数据集

HEADLINE 在报表变量标题和内容间生成一个水平分隔线

HEADSKIP 在报表变量标题和内容间生成一行空格

 

2 先生成一个基本的报表

先生成数据:

 datamnthly_sales;                  

   length zip $5 cty $ 8 var $ 10

   input zip $cty $ var $sales;    

   label zip="ZipCode"             

        cty="County"                

        var="Variety"               

        sales="MonthlySales";      

  datalines;                        

 52423 Scott Merlot186.             

 52423 Scott Chardonnay156.61       

 52423 Scott Zinfandel35.5          

 52423 Scott Merlot55.3             

 52388 Scott Merlot122.89           

 52388 Scott Chardonnay78.22        

 52388 Scott Zinfandel15.4          

 52200 Adams Merlot385.51           

 52200 Adams Chardonnay246          

 52200 Adams Zinfandel151.1         

 52200 Adams Chardonnay76.24       

 52199 Adams Merlot233.03          

 52199 Adams Chardonnay185.22      

 52199 Adams Zinfandel95.84        

              

run;

 

Proc Report生成最基本的报表:

proc report data=mnthly_sales 

    headlineheadskip;   

   title1 "SimpleReport";

   column cty zipvar sales;           

   define cty /display  width=6 'County/Name';

   define zip /display;               

   define var /display;               

   define sales /display format=6.2 width=10;

run   

这里的define后面的’/’,其后面有很多选项来对变量格式,输出方式等进行设置,其选项如下:

GROUP:分组显示

DISPLAY:一般显示

ANALYSIS:其值用于计算或统计

ORDER:按其值排序显示

ACROSS:交叉显示

COMPUTED:其值在compute块里计算得到

 

结果:

 

 [转载]PROC <wbr>REPORT基础

3 使用order,按指定变量名排序显示

proc reportdata=mnthly_sales 

    headlineheadskip;   

   title1 "SimpleReport";             

   column cty zipvarsales;           

   define cty /order  width=6'County/Name';               

   define zip /display;               

   define var /display;               

   define sales /display format=6.2width=10            

 run   

结果:

 

 [转载]PROC <wbr>REPORT基础

4 group分组显示

proc reportdata=mnthly_sales  nofs

    headlineheadskip;   

   title1 "SimpleReport";             

   column cty zipvarsales;           

   define cty /group   width=6'County/Name';               

   define zip/ group;               

   define var/  group order=freq descending;

   define sales /display format=6.2width=10            

 run   

         

结果:

 

 [转载]PROC <wbr>REPORT基础

5 analysis,统计量求和

proc reportdata=mnthly_sales  nofs

    headlineheadskip;   

   title1 "SimpleReport";             

   column ctyzip  sales;           

   define cty /group   width=6'County/Name';               

   define zip/ group;                              

   define sales /analysis sum  format=6.2width=10            

 run

结果:

 

 [转载]PROC <wbr>REPORT基础

6 求多个统计量

proc reportdata=mnthly_sales  nofs

    headlineheadskip;   

   title1 "SimpleReport";             

   column cty zipsalessales=mean_sales;           

   define cty /group   width=6'County/Name';               

   define zip/ group;                              

   define sales /analysis sum  format=6.2 width=10'sum';

    definemean_sales / analysis mean  format=6.2 width=10 'Mean of/Sales';

 run   

结果:

 

 [转载]PROC <wbr>REPORT基础

7如果你想让某变量的每一个值都作为一列,那就要用到across。这里要注意的是,有across选项的var,在column时后面加了一个’,’,从而将其后面的变量的数据直接放到across变量下。。

proc report data=mnthly_sales nofsheadline headskip;

   title1 "CrossTab Report (Across Type)";

   column cty zipvar,sales;

   define cty /group width=6 'County/Name';

   define zip /group;

   define var /across order=freq descending '- Grape Variety -';

   define sales /analysis sum format=6.2 width=10 'Revenue';

 run;

结果:

[转载]PROC <wbr>REPORT基础

 

这里,变量variety的每一个值都成为了新的列

 

8  BREAK与RBREAK,对分组后的报表汇总

proc report data=mnthly_sales nofsheadline headskip;

   title1 "Reportwith Breaks";

   column cty zipvar,sales;

   define cty /group width=6 'County/Name';

   define zip /group;

   define var /across order=freq descending '- Grape Variety -';

   define sales /analysis sum format=6.2 width=10 'Revenue';

   break aftercty / ol skip summarize suppress;

   rbreak after /dol skip summarize;

 run;

结果:

[转载]PROC <wbr>REPORT基础

 

这里说明一下BREAK与RBREAK后面的选项:

OL 汇总上方加一条线

DOL汇总上方加两条线

UL汇总下方加一条线 

DUL 汇总下方加两条线

summarize  对每组进行汇总 

skip  加入一空白行

suppress  在汇总行不显示组名

 

9 compute块,计算统计变量,这个以后将专门介绍

proc report data=mnthly_sales nofsheadline headskip;

   title1 "Reportwith Row Sums (Computed Type)";

   column cty zipvar,sales row_sum;

   define cty /group width=6 'County/Name';

   define zip /group;

   define var /across order=freq descending '- Grape Variety -';

   define sales /analysis sum format=6.2 width=10 'Revenue';

   define row_sum/ computed format=comma10.2 'Total';

   break aftercty / ol skip summarize suppress;

   rbreak after /dol skip summarize;

   computerow_sum;

    row_sum = sum(_C3_,_C4_,_C5_,_C6_,_C7_,_C8_);

  endcompute;

 run;

结果:

[转载]PROC <wbr>REPORT基础

 

Compute块是以compute开始,endcompute为结尾,可以计算出很多复杂的数据。这里的_C*_表示第几列的变量,例如_C3_表示第三列,_C#_代表最后一行。这里的_C7_和_C8_是多余的,但不影响结果。

 

10 procreport与ODS,以后会详细介绍。这里用ODS输出report过程结果,方法很简单,就是将上面的report代码放入ods语句之间。

ods  listing close; 

ods rtf file = ‘c:sugi30.rtf’; 

      上面的proc report过程代码放在这里就行 

ods rtf close;

即:

 

ods  listingclose; 

ods rtf file ='c:sugi30.rtf'; 

 proc reportdata=mnthly_sales nofs headline headskip;

   title1 "Reportwith Row Sums (Computed Type)";

   column cty zipvar,sales row_sum;

   define cty /group width=6 'County/Name';

   define zip /group;

   define var /across order=freq descending '- Grape Variety -';

   define sales /analysis sum format=6.2 width=10 'Revenue';

   define row_sum/ computed format=comma10.2 'Total';

   break aftercty / ol skip summarize suppress;

   rbreak after /dol skip summarize;

   computerow_sum;

    row_sum = sum(_C3_,_C4_,_C5_,_C6_,_C7_,_C8_);

  endcompute;

 run;

 ods rtf close;

结果:

 [转载]PROC <wbr>REPORT基础

11 report设置style,让报表更炫一点。这个以后也会详细介绍

ods  listingclose; 

ods rtf file ='c:sugi30.rtf'; 

 

 proc reportdata=mnthly_sales nofs headline headskip 

         style(header)={background=lightskyblue foreground=black}

         style(column)={background=lightcyan foreground=black};

   title1 "Reportwith Row Sums (Computed Type)";

   column cty zipvar,sales row_sum;

   define cty /group width=6 'County/Name';

   define zip /group;

   define var /across order=freq descending '- Grape Variety -';

   define sales /analysis sum format=6.2 width=10 'Revenue';

   define row_sum/ computed format=comma10.2 'Total';

   break aftercty / ol skip summarize suppress;

   rbreak after /dol skip summarize;

   computerow_sum;

    row_sum = sum(_C3_,_C4_,_C5_,_C6_,_C7_,_C8_);

  endcompute;

 run;

 ods rtf close;

结果:

 

 [转载]PROC <wbr>REPORT基础

 

 

0 0
原创粉丝点击