air2008 fancy departmental excel report
DESCRIPTION
vTRANSCRIPT
Get Fancy Department Level
Reports Using SAS ExcelXP Tagset
2008 AIR Forum
Seattle, Washington
Ray Wallace ([email protected])
Washington State University
View Presentation at
http://www.ir.wsu.edu/
Presentation Overview
• SAS Tagsets (Excel features from SAS)
• Style (Get it to look right)
• Department Looping (Macros)
What is a Tagset?
• Adds ‘tags’ to output using ODS
• Ex. HTML tag: <body>Put Body of Web Page Here</body>
• ExcelXP tagset uses xml tags, Ex.
<Row><Cell><Data> data in the
cell</Data></Cell></Row>
• Developed by Eric Gebhart from SAS
• Get the latest tagset code• http://support.sas.com/rnd/base/ods/odsmarkup/index.html• New version 1.86 available as of April 2008
Install the Latest Tagset
• Download the latest version from support.sas.com
• Save the *.tpl file
• Open the *.tpl file in SAS
• Run it
ExcelXP Tagset Code
How Does A Tagset Work?
A Tagset is just another ODS destination.
E.g.,
• listing
• html
• Tagsets (such as ExcelXP)
How Does A Tagset Work?
Things you can do to an ODS Destination
• Open ods tagsets.ExcelXP file=‘foo.xls’;
• Manage ods tagsets.ExcelXP
options(embedded_titles=‘yes’);
• Close ods tagsets.ExcelXP close;
Get A List Of The Available Tagsets
proc template;list tagsets;run;
User-defined tagsets will be located in SASUSER.TEMPLAT.User-defined tagsets will be located in SASUSER.TEMPLAT.Tagsets provided by SAS are in SASHELP.TMPLMSTTagsets provided by SAS are in SASHELP.TMPLMST
How Does Style Work?
Works with the ODS
Define with proc template
When issuing an ODS command style is impliedEx:
ods tagsets.excelxp file = ‘foo.xls’; is the same as
ods tagsets.excelxp file = ‘foo.xls’ style = default;
Get A List Of The Styles You Have
proc template; list styles;run;
Just like tagsets…User-defined styles will be in SASUSER.TEMPLAT
Styles provided by SAS are in SASHELP.TMPLMST
Make Your Own Style
Find a style you like then ‘tweek’ it a little.
proc template; source styles.default; run;
Easy To Create Your Own Style
Use inheritance then add your own twists
proc template;define style irstyle_xl; parent = styles.default; style systemtitle from systemtitle /
background=white foreground=cx990033 end;
Style Element
Inheritance
Building a Report
• Department Level Accreditation Data• Want a consolidated and concise report of information from
various topic areas• Display multiple years of data• Easy for users to read• Familiar format (Excel)• Metadata/data definitions• Extensible (able to add reports easily)• Printable
ExcelXP Options
Over 60 options and controls allow SAS to control Excel. Including…• Table of Contents/Index• Customizing column widths• Zooming• Header / footer control• Excel comments• Repeat cells• Sheet naming• Page orientation
Get Documentation:ods Tagsets.ExcelXP file = "c:\test.xls” options (doc='help') ;
ods tagsets.Excelxp close ;
ExcelXP Options
Determine the zoom level on the worksheetods tagsets.excelxp options (zoom=’88’) ;
‘100’ is the default
ExcelXP Options
Repeat header row on each page for printing ods tagsets.excelxp options(row_repeat=‘header’);
Also Use these options‘none’ -default‘1-3’ ‘5’
ExcelXP Options
Create a sheet which has links names of all other worksheets. ods tagsets.excelxp options(index=‘yes’);
ExcelXP Options
Name the worksheetsods tagsets.excelxp options (sheet_name=‘Overview Data’)
Could use a macro var“&dept”
ExcelXP Options
When to create a new sheetods tagsets.excelxp options (sheet_interval=’proc’) ;
‘Table’ is the default
Also use ‘page’, ‘ bygroup’, ‘proc’, ‘none’
ExcelXP Options
Format the page for printing ods tagsets.excelxp options (orientation=‘landscape’);
ExcelXP Options
Tells Excel the width of each columnods tagsets.excelxp options (default_Column_Width=‘12,9,6,6,6,6,6,8’);
ExcelXP Style Options
Use the currency format from Excel.In the proc report, proc print etc.
define fy2003 / analysis style(column)={tagattr="format:$#,##0_);[Red]($#,##0)"};
Others:‘format:##0.0%’ ‘format:##0.00’
Using Style
Using proc format with Excel comments
First…proc format ;value $subjdesc
‘MATH’=‘Mathematics’‘GENED’=‘General Education’
...more subject formats... ;
• Then…
ExcelXP Style Options
Print comments in the appropriate cells down the column
define prefix / group ‘Prefix‘style(column)={flyover=$subjdesc.} ;
Or explicitly define {fylover=‘Hello World’}
Three Levels of Style Hierarchy
1. Document level (ods statement)
ods tagsets.ExcelXP file = “c:\Report for &dept..xls”style=irstyle_xl;
Three Levels of Style Hierarchy
2. Procedure level (proc report statement)
proc report data=sashelp.classstyle(header)={font_weight=bold};
Three Levels of Style Hierarchy
3a. Variable level – e.g., define statement under proc report.
define taught_to / group style(column)={flyover=$ownother.};
Three Levels of Style Hierarchy
3b. Variable level - break and rbreak statement in proc report
rbreak after / ol summarize style(summary)=Total;
Total is a style element defined in the irstyle_xl.
style total from summary / flyover = ‘’
font_style = italic;
Two Levels of Style Specificity
Two levels of specificity
1. Style definition reference
style(header)=hrheader (predefined in irstyle_xl)
2. Direct
style(column)={font_size=2}
Macro Looping
To have your program create an Excel file for each academic department…
Use a macro!%macro deptloop(dept);
…SAS CODE…
%mend deptloop;
%deptloop(CHEM)
Macro Looping
What goes in the …SAS CODE… portion of the program?
First open the ODS destination and manage options for the first report.
ods tagsets.ExcelXP file = “c:\Report for &dept..xls”style=irstyle_xloptions (sheet interval=‘proc’
sheet_name=‘First dept report’);
Macro Looping
What goes in the …SAS CODE… portion of the program?
Then maybe some traffic lighting…
proc format;value traffic
low - <10 = ‘red’ 10 - <50 = ‘yellow’ 50 - high = ‘green’
Macro Looping
What goes in the …SAS CODE… portion of the program?
Now, the first report using proc print.
proc print data = deptreport1 ; var subject / style(column)={flyover=$subjdesc.}; var headcount / style(header)={background=cxD99795} style(column)={background=traffic.};where dept = “&dept”;run;
Macro Looping
What goes in the …SAS CODE… portion of the program?
Use ExcelXP options again for the next report
ods tagsets.ExcelXP options(sheet_name=‘Second Dept Report‘ default_Column_Width=’12,6,6,6,6,6’); frozen_header=‘2’);
Macro Looping
What goes in the …SAS CODE… portion of the program?
Write the second report.
proc report data = deptreport2 nowd missing ; column subject acad_year, fte; define subject/ group ‘Course Subject’; define acad_year / across ‘AY’ define fte /analysis sum ‘FTE’
style(column)={tagattr="format:##0.0“}; where dept = “&dept”;run;
Macro Looping
What goes in the …SAS CODE… portion of the program?
Now finish it up.
ods tagsets.ExcelXP close;
This closes the ODS and finishes creating the Excel file.
Then the macro must end and...
%mend deptloop; SAS must call the macro for the code to actually run.
%deptloop(CHEM)
Macro Looping
What if you have 100+ department and don’t want to write 100+ %deptloop() macro calls?
create macro var for a percent sign%let pctsign=%str(%%);
This will write all your macro calls for youdata _null_ ; set dept_list ; end = lastobs; file "c:\call the macro program.txt"; put "&pctsign" "deptloop (" dept +(1*-1) ")" ;
run;
This will run all your macro calls for you%include "c:\ call the macro program.txt" ;
Question?
Contact me at…Ray Wallace ([email protected])
Washington State University
View Presentation at
http://www.ir.wsu.edu/
ResourcesSAS-L newsgroupSAS emits SAS tech support
Tagset Linkshttp://support.sas.com/events/sasglobalforum/index.htmlhttp://support.sas.com/rnd/base/ods/odsmarkup/
Style Linkshttp://www.laurenhaworth.com/publications/195-28.pdfhttp://www.laurenhaworth.com/publications/132-30.pdfhttp://www.guptaprogramming.com/images/ODS_Custom.pdf