As the first step in the decommissioning of sasCommunity.org the site has been converted to read-only mode.


Here are some tips for How to share your SAS knowledge with your professional network.


Using PROC REPORT to jump-start itself

From sasCommunity
Jump to: navigation, search

PROC REPORT coding can get verbose, especially if there are a lot of variables requiring DEFINE statements. Here is a little trick which may speed things up a bit.

First, run PROC REPORT against the data set of interest, including the LIST option to list the code in the log and the NOEXEC option to prevent SAS from actually running the code. For example:

proc report data = sashelp.class list noexec ;
run ;

This should appear in the log:

PROC REPORT DATA=SASHELP.CLASS LS=96  PS=55  SPLIT="/" CENTER ;
COLUMN  Name Sex Age Height Weight;

DEFINE  Name / DISPLAY FORMAT= $8. WIDTH=8     SPACING=2   LEFT "Name" ;
DEFINE  Sex / DISPLAY FORMAT= $1. WIDTH=1     SPACING=2   LEFT "Sex" ;
DEFINE  Age / SUM FORMAT= BEST9. WIDTH=9     SPACING=2   RIGHT "Age" ;
DEFINE  Height / SUM FORMAT= BEST9. WIDTH=9     SPACING=2   RIGHT "Height" ;
DEFINE  Weight / SUM FORMAT= BEST9. WIDTH=9     SPACING=2   RIGHT "Weight" ;
RUN;

Copy the code to the program editor, and make any needed changes. Suppose we want average heights and weights by sex and age. Just insert the NOWD option in the PROC statement (assuming that interactive windowing is not needed), comment out the reference to NAME in the COLUMN statement and the DEFINE statement for NAME, and change the first option in each of the remaining DEFINE statements:

PROC REPORT DATA=SASHELP.CLASS LS=96  PS=55  SPLIT="/" CENTER     nowd ;
COLUMN     /* Name */     Sex Age Height Weight;

*DEFINE  Name / DISPLAY FORMAT= $8. WIDTH=8     SPACING=2   LEFT "Name" ;
DEFINE  Sex /     group     FORMAT= $1. WIDTH=1     SPACING=2   LEFT "Sex" ;
DEFINE  Age /     group     FORMAT= BEST9. WIDTH=9     SPACING=2   RIGHT "Age" ;
DEFINE  Height /     mean     FORMAT= BEST9. WIDTH=9     SPACING=2   RIGHT "Height" ;
DEFINE  Weight /     mean     FORMAT= BEST9. WIDTH=9     SPACING=2   RIGHT "Weight" ;
RUN;

The output:

S
e
x        Age     Height     Weight
F         11       51.3       50.5
          12      58.05      80.75
          13       60.9         91
          14      63.55      96.25
          15       64.5     112.25
M         11       57.5         85
          12  60.366667      103.5
          13       62.5         84
          14      66.25      107.5
          15      66.75      122.5
          16         72        150

Cosmetic refinements can be made by changing the WIDTH option for SEX and the FORMAT options for HEIGHT and WEIGHT.