An In-depth Look at PROC REPORT Jane Eslinger Senior Technical Support Analyst SAS Institute
HEADER LAYERS
Goal: Learn how each layer (or row) is added to the header section of
the report.
title "vanilla";
proc report data=sashelp.cars nowd;
column make origin mpg_city mpg_highway;
define make / group 'Vehicle Brand';
define origin / group 'Vehicle Origin';
run;
title "add across";
proc report data=sashelp.cars nowd;
column make origin drivetrain,(mpg_city mpg_highway);
define make / group 'Vehicle Brand';
define origin / group 'Vehicle Origin';
define drivetrain / across 'Drivetrain Category';
run;
title "add spanning header over across";
proc report data=sashelp.cars nowd;
column make origin
('Spanning MPG columns' drivetrain,(mpg_city mpg_highway));
define make / group 'Vehicle Brand';
define origin / group 'Vehicle Origin';
define drivetrain / across 'Drivetrain Category';
run;
title "add spanning header above Make";
title2 "add spanning header above Origin";
proc report data=sashelp.cars nowd;
column ('Beside drivetrain values 1' make)
('Beside drivetrain values 2' origin)
('Spanning MPG columns' drivetrain,(mpg_city mpg_highway));
define make / group 'Vehicle Brand';
define origin / group 'Vehicle Origin';
define drivetrain / across 'Drivetrain Category';
run;
title "add another spanning header above Make";
proc report data=sashelp.cars nowd;
column ('Beside drivetrain label' 'Beside drivetrain values 1' make)
('Beside drivetrain values 2' origin)
('Spanning MPG columns' drivetrain,(mpg_city mpg_highway));
define make / group 'Vehicle Brand';
define origin / group 'Vehicle Origin';
define drivetrain / across 'Drivetrain Category';
run;
title "add a spanning header above both Make and Origin";
proc report data=sashelp.cars nowd;
column
('Spanning Make and Origin'
('Beside drivetrain label' 'Beside drivetrain values 1' make)
('Beside drivetrain values 2' origin))
('Spanning MPG columns' drivetrain,(mpg_city mpg_highway));
define make / group 'Vehicle Brand';
define origin / group 'Vehicle Origin';
define drivetrain / across 'Drivetrain Category';
run;
RULES VALUES
Goal: See borders created by the RULES= attribute.
proc report data=sashelp.cars style(report)=[rules=all]; column make ('Beside drivetrain values' origin)
drivetrain,(mpg_city mpg_highway);
define make / group 'Vehicle Brand';
define origin / group 'Vehicle Origin';
define drivetrain / across 'Drivetrain';
run;
proc report data=sashelp.cars style(report)=[rules=cols];
proc report data=sashelp.cars style(report)=[rules=rows];
proc report data=sashelp.cars style(report)=[rules=groups];
proc report data=sashelp.cars style(report)=[rules=none];
SPANNING HEADERS
Goal: Change the vertical border between the spanning headers for
MAKE and ORIGIN to red. Change the horizontal border between the
spanning header and the DRIVETRAIN label to yellow.
ods escapechar="^";
proc report data=sashelp.cars(obs=100) nowd;
column
('^S={borderrightcolor=red}Beside drivetrain values 1' make)
('^S={borderleftcolor=red}Beside drivetrain values 2' origin)
('^S={borderbottomcolor=yellow}Spanning MPG columns' drivetrain,
(mpg_city mpg_highway));
define make / group 'Vehicle Brand';
define origin / group 'Vehicle Origin';
define drivetrain / across 'Drivetrain Category';
run;
proc report data=sashelp.cars(obs=100) nowd;
column
('^S={borderrightcolor=red}Beside drivetrain values 1' make)
('^S={borderleftcolor=red}Beside drivetrain values 2' origin)
('^S={borderbottomcolor=yellow}Spanning MPG columns' drivetrain,
(mpg_city mpg_highway));
define make / group 'Vehicle Brand';
define origin / group 'Vehicle Origin';
define drivetrain / across '^S={bordertopcolor=yellow}Drivetrain
Category';
run;
proc report data=sashelp.cars(obs=100) nowd;
column
('^S={borderrightcolor=red}Beside drivetrain values 1' make)
('^S={borderleftcolor=red}Beside drivetrain values 2' origin)
('Spanning MPG columns' drivetrain,(mpg_city mpg_highway));
define make / group 'Vehicle Brand';
define origin / group 'Vehicle Origin';
define drivetrain / across 'Drivetrain Category'
style(header)=[bordertopcolor=yellow];
run;
data cars;
set sashelp.cars;
flag='Drivetrain';
run;
proc report data=cars(obs=100) nowd;
column
('^S={borderrightcolor=red}Beside drivetrain values 1' make)
('^S={borderleftcolor=red}Beside drivetrain values 2' origin)
('Spanning MPG columns' flag,
drivetrain,(mpg_city mpg_highway));
define make / group 'Vehicle Brand';
define origin / group 'Vehicle Origin';
define flag / across '' style(header)=[bordertopcolor=yellow];
define drivetrain / across '';
run;
BACKGROUND COLORS IN HEADERS
Goal: Use inline formatting to change the background color of a
header cell to green in HTML output.
ods escapechar="^";
proc report data=sashelp.cars(obs=100) nowd;
column
('Beside drivetrain values 1' make)
('Beside drivetrain values 2' origin)
('Spanning MPG columns' drivetrain,(mpg_city mpg_highway));
define make / group 'Vehicle Brand';
define origin / group 'Vehicle Origin';
define drivetrain / across '^S={background=lightgreen}Drivetrain';
run;
data cars;
set sashelp.cars;
flag='Drivetrain';
run;
proc report data=cars(obs=100) nowd;
column
('Beside drivetrain values 1' make)
('Beside drivetrain values 2' origin)
('Spanning MPG columns' flag, drivetrain,(mpg_city mpg_highway));
define make / group 'Vehicle Brand';
define origin / group 'Vehicle Origin';
define flag / across '' style(header)=[background=lightgreen] missing;
define drivetrain / across '';
run;
COLUMN BORDERS
Goal: Remove the borders between the MPG_CITY and MPG_HIGHWAY columns
so that it is easier to distinguish the DRIVETRAIN groupings.
proc report data=sashelp.cars(obs=100) nowd;
column make origin drivetrain,(mpg_city mpg_highway);
define make / group 'Vehicle Brand';
define origin / group 'Vehicle Origin';
define drivetrain / across 'Drivetrain';
define mpg_city / style(column header)=
[borderrightcolor=white borderrightwidth=0pt just=c];
define mpg_highway / style(column header)=
[borderleftcolor=white borderleftwidth=0pt just=c];
run;
proc report data=sashelp.cars(obs=100) nowd
style(report)=[rules=rows];
column make origin drivetrain,(mpg_city mpg_highway);
define make / group 'Vehicle Brand'
style(header column)=[borderleftwidth=.75pt borderleftcolor=cx919191];
define origin / group 'Vehicle Origin'
style(header column)=[borderleftwidth=.75pt borderleftcolor=cx919191];
define drivetrain / across 'Drivetrain'
style(header column)=[borderleftwidth=.75pt borderleftcolor=cx919191];
define mpg_city / style(header column)=[borderleftwidth=.75pt
borderleftcolor=cx919191 just=c];
define mpg_highway / style(column)=[just=c];
run;
REFERENCES
Sample 46021: Customize header borders in ODS PDF and ODS RTF output
with PROC REPORT
http://support.sas.com/kb/46021
Sample 46022: Customize table or cell borders in ODS PDF and ODS RTF
output using PROC REPORT
http://support.sas.com/kb/46022
Sample 50229: Insert border lines between groups in PROC REPORT output
http://support.sas.com/kb/50229
Beyond the Basics: Advanced REPORT Procedure Tips and Tricks Updated
for SAS® 9.2– Allison McMahill, SAS Institute Inc.
http://support.sas.com/resources/papers/proceedings11/246-2011.pdf