0% found this document useful (0 votes)
91 views28 pages

Proc Report, The Right Tool For Job: Eric Gebhart

Proc Report is a SAS procedure that produces tabular reports from SAS data sets. It allows for grouping, summarizing, and computing new variables. The document discusses using Proc Report to: 1) Create simple reports with columns, define variables, and format values. 2) Compute means, add new columns, and break reports into groups. 3) Create percentage columns and bar charts using ODS styles and tags. 4) Produce survey reports by grouping questions, ordering departments, and formatting percentages. 5) Build drill-down reports with hyperlinks to detail pages using computed variables.

Uploaded by

Nandu Gopal
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
91 views28 pages

Proc Report, The Right Tool For Job: Eric Gebhart

Proc Report is a SAS procedure that produces tabular reports from SAS data sets. It allows for grouping, summarizing, and computing new variables. The document discusses using Proc Report to: 1) Create simple reports with columns, define variables, and format values. 2) Compute means, add new columns, and break reports into groups. 3) Create percentage columns and bar charts using ODS styles and tags. 4) Produce survey reports by grouping questions, ordering departments, and formatting percentages. 5) Build drill-down reports with hyperlinks to detail pages using computed variables.

Uploaded by

Nandu Gopal
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 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/ [email protected] [email protected]

You might also like