Learning PROC REPORT by Comparison

摘录自:

Learning PROC REPORT by Comparison
Keith Cranford, Office of the Attorney General of Texas, Austin, Texas

 

PROC PRINT COMPARISON

 

SIMPLE LISTING

*****PROC PRINT****;
title 'Simple Listing' ;
proc print data=sashelp.class ;
   var name sex age height weight ;
   title2 'PROC PRINT' ;
run ;
*****PROC REPORT****;
proc report data=sashelp.class nowd headskip ;
   column name sex age height weight ; /*COLUMN和PROC PRINT中VAR语句效果同 */
   define sex / width=3 ;              /*DEFINE设置属性选项*/
   title2 'PROC REPORT' ;
run ;
****specifying formats***** ;
proc report data=sashelp.class nowd headskip ;
   column Obs name sex age height weight ;
   define sex / width=3 center ;
   define age / width=5 ;
   define height / format=6.1 ;
   define weight / format=6.1 ;
   define obs / computed ;
   compute obs ;
      count+1 ;
      obs=count ;
   endcomp ;
   title2 'PROC REPORT, again' ;
run ;

 

SORTED LISTING

****proc sort,proc print*****;
proc sort data=sashelp.class out=class ;
   by sex ;
run ;
title 'Sorted Listing' ;
proc print data=class ;
   var name age ;
   by sex ;
   id sex ;
   title2 'PROC PRINT' ;
run ;
****proc report*****;
proc report data=sashelp.class nowd headskip ;
   column sex name age ;
   define sex / order width=3 ;
   break after sex / skip ;          /*brack after ,skip每组后插入空格*/
   title2 'PROC REPORT' ;
run ;

 

LISTING WITH SUBTOTALS

*****proc print, suby******;
title 'Subtotals' ;
proc print data=class ;
   var name age ;
   by sex ;
   id sex ;
   sumby sex ;                       /*sumby对所有数值型变量求和*/
   title2 'PROC PRINT' ;
run ;
*******proc report*********;
proc report data=sashelp.class nowd ;
   column sex name age ;
   define sex / order width=3 ;
   define age / analysis sum format=4.;
   break before sex / skip ;
   break after sex / summarize ol ; /*ol,(overline)跨线*/
   rbreak after / summarize dol ;   /*dol,(double overline)双跨线*/
   title2 'PROC REPORT' ;
run ;

*****with other statistics such as mean*****;
proc report data=sashelp.class nowd ;
   column sex sex2 name age ;        
   define sex / order width=3 noprint ;
   define sex2 / computed 'Sex' ;    /*揭示sex2是计算列*/
   define age / mean format=best4. ;  /*求mean*/
   break before sex / skip ;
   break after sex / summarize ol ;
   rbreak after / summarize dol ;
   compute sex2 / character length=15 ; /*详细说明sex2的属性*/
       sex2=sex ;
   endcomp ;
   compute after sex ;
       sex2='Average for ' || sex ;    /*改变sex2的显示为Average for F or M*/
endcomp ;
compute after ;
       sex2='Overall Average' ;
endcomp ;
title2 'PROC REPORT and more' ;
run ;
****creating a new column ***;
proc format ;
   value $gender 'F'='females'
                 'M'='males' ;
run ;
proc report data=sashelp.class nowd headline ;
    column sex name age ;
    define sex / order width=3 ;
    define age / mean ;
    break after sex / skip ;
    compute after sex ;
       text='Average for ' || strip(put(sex, $gender.)) ||
                       ' is ' || put(age.mean, 4.1) ;
           line ' ';                  /*line 语句与data 步中的put语句类似*/
       line text $40. ;            
    endcomp ;
    compute after ;
       line 'Overall Average is ' age.mean 4.1 ;
    endcomp ;
    title2 'PROC REPORT and more, again' ;
run ;

 

PROC TABULATE COMPARISON

SUMMARY STATISTICS

***proc tabulate***;
title 'Summary Statistics' ;
proc tabulate data=sashelp.class ;
   class sex ;
   var age ;
   table sex, age*(n*f=4. mean*f=6.2) ;
   title2 'PROC TABULATE' ;
run ;

proc report data=sashelp.class nowd split='~' box ;
   column sex age age=avg_age ;
   define sex / group width=3 ;
   define age / n 'N' format=4.0 width=4;
   define avg_age / mean 'Average~Age' format=6.2 width=7;
   title2 'PROC REPORT' ;
run ;
**Removing the BOX option**;
proc report data=sashelp.class nowd split='~' headline ;
   column sex age age=avg_age ;
   define sex / group width=3 ;
   define age / n 'N' format=4.0 width=4;
   define avg_age / mean 'Average~Age' format=6.2 width=7;
   title2 'PROC REPORT' ;
run ;

Cross-Tabulation

***Cross-Tabulation****;
options missing='0' ;
title 'Cross-tabulation' ;
proc tabulate data=sashelp.class ;
   class sex age ;
   table age, sex*n*f=4. ;
   title2 'PROC TABULATE' ;
run ;

proc report data=sashelp.class nowd headline ;
   column age sex ;
   define age / group ;
   define sex / across width=3 right ;
   title2 'PROC REPORT' ;
run
;

 

CROSS-TABULATION WITH SUMMARY

***CROSS-TABULATION WITH SUMMARY***;
options missing='?';
title 'Cross-tabulation with Summary' ;
proc tabulate data=sashelp.class ;
   class sex age ;
   var height ;
   table age, sex*height*mean*f=6.1 ;
   title2 'PROC TABULATE' ;
run ;

proc report data=sashelp.class nowd split='~' headline ;
   column age sex, height ;
   define age / group ;
   define sex / across '__Sex__' width=3 right ;
   define height / analysis mean 'Average~Height'
   format=6.1 width=8 ;
   title2 'PROC REPORT' ;
run ;

 

PERCENTAGES

***PERCENTAGES*****;
title 'Percentages' ;
proc tabulate data=sashelp.class ;
   class sex ;
   table sex, n pctn<sex> ;
   title2 'PROC TABULATE' ;
run ;

proc report data=sashelp.class nowd box ;
   column sex N pctn ;
   define sex / group width=3;
   define n / width=5 ;
   define pctn / '%' format=percent7.1 ;
   title2 'PROC REPORT' ;
run ;

PROC MEANS COMPARISON

***SUMMARY STATISTICS****;
title 'Summary Statistics 2' ;
proc means data=sashelp.class mean std min max maxdec=1;
   class sex ;
   var height ;
   title2 'PROC MEANS' ;
run ;

proc report data=sashelp.class nowd split='~' headline ;
   column sex height, (n mean std min max) ;
   define sex / group width=3 ;
   define height / '__Height__' ;
   define n / 'N' width=3 ;
   define mean / 'Mean' format=5.1 ;
   define std / 'Std~Dev' format=5.2 ;
   define min / 'Min' format=5.1 ;
   define max / 'Max' format=5.1 ;
   title2 'PROC REPORT' ;
run ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值