| Creating Detail and Summary Reports with the REPORT Procedure |
| Displaying All the Variables |
By default, PROC REPORT uses all of the variables in the data set. The layout of the report depends on the type of variables in the data set. If the data set contains any character variables, then PROC REPORT generates a simple detail report that lists the values of all the variables and the observations in the data set. If the data set contains only numeric variables, then PROC REPORT sums the value of each variable over all observations in the data set and produces a one-line summary of the sums. To produce a detail report for a data set with only numeric values, you have to define the columns in the report.
By default, PROC REPORT opens the REPORT window so that you can modify a report repeatedly and see the modifications immediately. To run PROC REPORT without the REPORT window and send your results to the SAS procedure output, you must use the NOWINDOWS option in the PROC REPORT statement.
The following PROC REPORT step creates the default detail report for the first quarter sales:
options linesize=80 pageno=1 nodate; proc report data=year_sales nowindows; where quarter='1'; title1 'TruBlend Coffee Makers, Inc.'; title2 'First Quarter Sales Report'; run;
The WHERE statement specifies a condition that SAS uses to select observations from the YEAR_SALES data set. Before PROC REPORT builds the report, SAS selectively processes observations so that the report contains only data for the observations from the first quarter. For additional information about WHERE processing, see Selecting Observations.
The following detail report shows all the variable values for those observations in YEAR_SALES that contains first quarter sales data:
The Default Report When the Data Set Contains Character Values
TruBlend Coffee Makers, Inc.4 1 First Quarter Sales Report AmountSol Month1 Quarter SalesRep Type Units Price d2 01 1 Hollingsworth Deluxe 260 49.5 128703 01 1 Garcia Standard 41 30.97 1269.77 01 1 Hollingsworth Standard 330 30.97 10220.1 01 1 Jensen Standard 110 30.97 3406.7 01 1 Garcia Deluxe 715 49.5 35392.5 01 1 Jensen Standard 675 30.97 20904.75 02 1 Garcia Standard 2045 30.97 63333.65 02 1 Garcia Deluxe 10 49.5 495 02 1 Garcia Standard 40 30.97 1238.8 02 1 Hollingsworth Standard 1030 30.97 31899.1 02 1 Jensen Standard 153 30.97 4738.41 02 1 Garcia Standard 98 30.97 3035.06 03 1 Hollingsworth Standard 125 30.97 3871.25 03 1 Jensen Standard 154 30.97 4769.38 03 1 Garcia Standard 118 30.97 3654.46 03 1 Hollingsworth Standard 25 30.97 774.25 03 1 Jensen Standard 525 30.97 16259.25 03 1 Garcia Standard 310 30.97 9600.7The following list corresponds to the numbered items in the preceding report:
The following PROC REPORT step produces the default summary report when the YEAR_SALES data set contains only numeric values:
options linesize=80 pageno=1 nodate; proc report data=year_sales (keep=Units AmountSold) colwidth=10 nowindows; title1 'TruBlend Coffee Makers, Inc.'; title2 'Total Yearly Sales'; run;
The KEEP= data set option specifies to process only the numeric variables Units and Amountsold. PROC REPORT uses these variables to create the report. The COLWIDTH= option increases the column width so that the column label for AmountSold displays on a single line.
The following report displays a one-line summary for the two numeric variables:
The Default Report When the Data Set Contains Only Numeric Values
TruBlend Coffee Makers, Inc. 1
Total Yearly Sales
Units AmountSold
40989 1320479.48
PROC REPORT computed the one-line summary for Units and AmountSold
by summing the value of each variable for all the observations in the data
set.
| Specifying and Ordering the Columns |
The first step in constructing a report is to select the columns that you want to appear in the report. By default, the report contains a column for each variable and the order of the columns corresponds to the order of the variables in the data set.
You use the COLUMN statement to specify the variables to use in the report and the arrangement of the columns. In the COLUMN statement you can list data set variables, statistics that are calculated by PROC REPORT, or variables that are computed from other items in the report.
The following program creates a four column sales report for the first quarter:
options linesize=80 pageno=1 nodate; proc report data=year_sales nowindows; where Quarter='1'; column SalesRep Month Type Units; title1 'TruBlend Coffee Makers, Inc.'; title2 'First Quarter Sales Report'; run;
The COLUMN statement specifies the order of the items in the report. The first column lists the values in SalesRep, the second column lists the values in Month, and so forth.
The following output shows the report:
TruBlend Coffee Makers, Inc. 1
First Quarter Sales Report
SalesRep Month Type Units
Hollingsworth 01 Deluxe 260
Garcia 01 Standard 41
Hollingsworth 01 Standard 330
Jensen 01 Standard 110
Garcia 01 Deluxe 715
Jensen 01 Standard 675
Garcia 02 Standard 2045
Garcia 02 Deluxe 10
Garcia 02 Standard 40
Hollingsworth 02 Standard 1030
Jensen 02 Standard 153
Garcia 02 Standard 98
Hollingsworth 03 Standard 125
Jensen 03 Standard 154
Garcia 03 Standard 118
Hollingsworth 03 Standard 25
Jensen 03 Standard 525
Garcia 03 Standard 310
| Ordering the Rows |
You control much of the layout of a report by deciding how you use the variables. You tell PROC REPORT how to use a variable by specifying a usage option in the DEFINE statement for the variable.
To specify the order of the rows in the report, you can use the ORDER option in one or more DEFINE statements. PROC REPORT orders the rows of the report according to the values of the ORDER variables. If the report contains multiple ORDER variables, then PROC REPORT first orders rows according to the values of the first ORDER variable in the COLUMN statement.(footnote 1) Within each value of the first ORDER variable, the procedure orders rows according to the values of the second ORDER variable in the COLUMN statement, and so forth.
The following program creates a detail report of sales for the first quarter that is ordered by the sales representatives and month:
options linesize=80 pageno=1 nodate; proc report data=year_sales nowindows; where Quarter='1'; column SalesRep Month Type Units; define SalesRep / order; define Month / order; title1 'TruBlend Coffee Makers, Inc.'; title2 'First Quarter Sales Report'; run;
The DEFINE statements specify that SalesRep and Month are the ORDER variables. The COLUMN statement specifies the order of the columns. By default, the rows are ordered by the ascending formatted values of SalesRep. The rows for each sales representative are ordered by the values of Month.
The following output shows the report:
TruBlend Coffee Makers, Inc. 1
First Quarter Sales Report
SalesRep Month Type Units
Garcia 01 Standard 41
Deluxe 715
02 Standard 2045
Deluxe 10
Standard 40
Standard 98
03 Standard 118
Standard 310
Hollingsworth 01 Deluxe 260
Standard 330
02 Standard 1030
03 Standard 125
Standard 25
Jensen 01 Standard 110
Standard 675
02 Standard 153
03 Standard 154
Standard 525
PROC REPORT does not repeat the values of the ORDER variables from
one row to the next when the values are the same.
| Consolidating Several Observations into a Single Row |
You can create summary reports with PROC REPORT by defining one or more GROUP variables. A group is a set of observations that has a unique combination of values for all GROUP variables. PROC REPORT tries to consolidate, or summarize, each group into one row of the report.
To consolidate all columns across a row, you must define all variables in the report as either GROUP, ANALYSIS, COMPUTED, or ACROSS. The GROUP option in one or more DEFINE statements identifies the variables that PROC REPORT uses to form groups. You can define more than one variable as a GROUP variable, but GROUP variables must precede variables of the other types of usage. PROC REPORT determines the nesting by the order of the variables in the COLUMN statement. For more information about defining the usage of a variable, see Constructing the Layout.
The value of an ANALYSIS variable for a group is the value of the statistic that PROC REPORT computes for all observations in a group. For each ANALYSIS variable, you can specify the statistic in the DEFINE statement. By default, PROC REPORT uses all numeric variables as the ANALYSIS variables and computes the SUM statistic. The statistics that you can request in the DEFINE statement are as follows:
| Descriptive statistic keywords | |
| CSS | PCTSUM |
| CV | RANGE |
| MAX | STD |
| MEAN | STDERR |
| MIN | SUM |
| N | SUMWGT |
| NMISS | USS |
| PCTN | VAR |
| Quantile statistic keywords | |
| MEDIAN|P50 | Q3|P75 |
| P1 | P90 |
| P5 | P95 |
| P10 | P99 |
| Q1|P25 | QRANGE |
| Hypothesis testing keyword | |
| PRT | T |
For definitions and discussion of these elementary statistics, see the Appendix in the Base SAS Procedures Guide.
The following program creates a summary report that shows the total yearly sales for each sales representative:
options linesize=80 pageno=1 nodate; proc report data=year_sales nowindows colwidth=10; column SalesRep Units AmountSold; define SalesRep /group;1 define Units / analysis sum;2 define AmountSold/ analysis sum;3 title1 'TruBlend Coffee Makers Sales Report'; title2 'Total Yearly Sales'; run;
The following list corresponds to the numbered items in the preceding program:
The following output shows the report:
Grouping Multiple Observations in a Summary Report
TruBlend Coffee Makers Sales Report 1
Total Yearly Sales
SalesRep Units AmountSold
Garcia 15969 512070.78
Hollingsworth 10620 347246.1
Jensen 14400 461162.6
Each row of the report represents one group and summarizes all observations
that have a unique value for SalesRep. PROC REPORT orders these rows in ascending
order of the GROUP variable, which in this example is the sales representative
ordered alphabetically. The values of the ANALYSIS variables are the sum of
Units and AmountSold for all observations in a group, which in this case is
the total units and amount sold by each sales representative.
| Changing the Default Order of the Rows |
You can modify the default ordering sequence for the rows of a report by using the ORDER= or DESCENDING option in the DEFINE statement. The ORDER= option specifies the sort order for a variable. You can order the rows by:
| DATA | |
| FORMATTED | |
| FREQ | |
| INTERNAL |
The following program creates a detail report of the first quarter sales that is ordered by number of sales:
options linesize=80 pageno=1 nodate; proc report data=year_sales nowindows; where Quarter='1'; column SalesRep Type Units Month; define SalesRep / order1 order=freq;2 define Units / order1 descending;3 define Type / order1 ; title1 'TruBlend Coffee Makers, Inc.'; title2 'First Quarter Sales Report'; run;
The following list corresponds to the numbered items in the preceding program:
The following output shows the report:
Changing the Order Sequence of the Rows
TruBlend Coffee Makers, Inc. 1
First Quarter Sales Report
SalesRep Type Units Month1
Hollingsworth2 Deluxe 260 01
Standard3 1030 02
4 330 01
125 03
25 03
Jensen Standard 675 01
525 03
154 03
153 02
110 01
Garcia Deluxe 715 01
10 02
Standard 2045 02
310 03
118 03
98 02
41 01
40 02
The following list corresponds to the numbered items in the preceding
report:
FOOTNOTE 1:
If you omit the COLUMN statement, then
PROC REPORT processes the ORDER variables according to their position in the
input data set. ![[arrow]](../../../../common/64368/HTML/default/images/fntarrow.gif)
Copyright © 2012 by SAS Institute Inc., Cary, NC, USA. All rights reserved.