You are on page 1of 28

Proc Report, the right tool for job

Eric Gebhart

Summary Reports Statistics Detail Reports Compute Blocks

PROC REPORT data= SAS-data-set options NOWD; COLUMNS variable_1 .... variable_n; DEFINE variable_1; ... DEFINE variable_n; COMPUTE blocks BREAK ... ; RBREAK ... ; RUN;

Starting Simple
Columns Dene

Proc Report data=sashelp.class nowd; columns name sex age height weight; dene name / display dene sex / display dene age / display dene height / analysis dene weight / analysis run; Name width=10; Gender width=6; Age width=4; Height format=8.1; Weight format=8.1;

Column Types
GROUP DISPLAY ANALYSIS ORDER ACROSS COMPUTED

Group & Compute


Mean Weight & Height Compute a New Column Summarize Mean

Proc Report data=sashelp.class nowd; columns name sex age height weight ratio; dene name / display Name width=10; dene sex / display Gender width=6; dene age / display Age width=4; dene height / analysis mean Height format=8.1; dene weight / analysis mean Weight format=8.1; dene ratio / computed format=6.2; compute ratio; ratio = height.mean / weight.mean; endcompute; rbreak after / summarize;

rbreak after / summarize;

Group & Compute


Group by Sex Break After Sex

Proc Report data=sashelp.class nowd; columns sex name age height weight ratio; dene name / display Name width=10; dene sex / group Gender width=6; dene age / display Age width=4; dene height / analysis mean Height format=8.1; dene weight / analysis mean Weight format=8.1; dene ratio / computed format=6.2; compute ratio; ratio = height.mean / weight.mean; endcompute; break after sex / summarize;

break after sex / summarize;

Percentage of Weight
Column Alias Analysis With No Print Compute Before Summarize with Style

Proc Report data=sashelp.class nowd; columns sex name age height weight weight=weight2 weight_pct; dene name / display Name width=10; dene sex / group Gender width=6; dene age / display Age width=4; dene height / analysis mean Height format=8.1; dene weight / analysis noprint Weight format=8.1; dene weight2 / analysis mean 'Weight' format=8.1; dene weight_pct / computed '% of Weight' format=8.2; compute weight_pct; weight_pct = weight.sum / weight_sum; endcompute; compute before sex; weight_sum = weight.sum; endcompute; break after sex / summarize style=header;

Weight2

Percentage Bars
Slider Tagset Style Over Rides Slide bar Percentages

ods tagsets.slider le='example6.html' style=slider; Proc Report data=sashelp.class nowd ;


columns sex name age height weight weight=weight2 weight_pct; dene sex / group 'Gender' width=6; dene name / display 'Name' width=10; dene age / display 'Age' width=4; dene height / analysis mean 'Height' format=8.1; dene weight / analysis noprint format=8.1; dene weight2 / analysis mean 'Weight' format=8.1; dene weight_pct / computed '% of Weight'

format=Percent6. left style(column)=bar[tagattr="slider"];

format=Percent6. left style(column)=bar[tagattr="slider"];

Survey Report
Survey Tagset Group By Question Order By Department Line Statement

Simple Data
cards; The computer I have is adequate for my needs Design 10 30 13% 50% 37% 2002 The computer I have is adequate for my needs Marketing 20 30 10% 40% 50% 2002 The computer I have is adequate for my needs Devel 10 50 19% 60% 21% 2002 The computer I have is adequate for my needs Pubs 40 20 10% 67% 23% 2002 The Software on my computer is always up to date Design 10 30 5% 48% 47% 2002 The Software on my computer is always up to date Marketing 40 40 10% 50% 40% 2002 The Software on my computer is always up to date Devel 10 30 23% 74% 3% 2002 The Software on my computer is always up to date Pubs 50 60 17% 35% 47% 2002 ....

PROC REPORT DATA=test SPLIT="/" HEADLINE HEADSKIP CENTER nowd; by year;

COLUMN question ( dept ( diff valid pct1 pct2 pct3 ) ); dene question / order noprint; DEFINE dept / ORDER FORMAT= $16. WIDTH=16 SPACING=2 LEFT "ITEMS" style=header; DEFINE diff / DISPLAY FORMAT= BEST9. WIDTH=9 SPACING=2 center "Diff % Fav"; DEFINE valid / SUM FORMAT= BEST9. WIDTH=7 SPACING=2 center "Valid N" ; DEFINE pct1 / SUM FORMAT= PERCENT6. WIDTH=6 SPACING=2 center "Unfavorable" style=UnFav[tagattr="start"]; DEFINE pct2 / SUM FORMAT= PERCENT6. WIDTH=6 SPACING=2 center "Neutral" style=Neutral[tagattr="in"]; DEFINE pct3 / SUM FORMAT= PERCENT6. WIDTH=6 SPACING=2 center "Favorable" style=Fav[tagattr="end"]; break before question /; compute before question / style=Question[just=left] ; line question $80.; endcomp;

Drill Down Report


Summary Report Detail Reports Compute HyperLinks

proc report data=work.bptrial nowd split='\'; column patient drug sex fever nausea rash reaction; dene patient / group; dene drug / group; dene sex / group; dene fever / analysis sum noprint; dene nausea / analysis sum noprint; dene rash / analysis sum noprint; dene reaction / computed 'Reaction?'; compute before patient; ptno + 1; Anchor Counter endcomp; compute patient; Create a URL

endcomp; run;

urlstring = "rephow2det.htm#pt" || left(put(ptno,3.0)); call dene (_col_, 'url', urlstring );

File To Match ods html body = "rephow2det.htm" anchor = "pt1"; Anchor To Match

proc report data=work.bptrial nowd split='\'; column patient drug sex visitdate ("Blood Pressure" systolic slash diastolic) ("Reactions" fever nausea rash; ....

Resources
http://support.sas.com/rnd/base/index.html http://support.sas.com/rnd/base/index-ods-resources.html http://support.sas.com/rnd/base/topics/odsmarkup/ ODS@SAS.com Eric.Gebhart@SAS.com

You might also like