Data visualization with SAS programming

Fun With SAS ODS Graphics: 5-4-3-2-1 AP Exam Scores!

Accepted Solution Solved
Reply
Contributor tc
Contributor
Posts: 74
Accepted Solution

Fun With SAS ODS Graphics: 5-4-3-2-1 AP Exam Scores!

[ Edited ]

SAS OUTPUT (CLICK TO VIEW LARGER IMAGE)

2017APSCORES.gif

 

Was wondering what might be a good way to plot the just-released 2017 AP Exam Score Distributions posted by Total Registration, when I stumbled across Robert Allison's fine How to 'stack the deck' for a better graph! Eureka!

 

SAS CODE

*-> Fun w/SAS ODS Graphics: 5-4-3-2-1 AP Exam Scores! (2017 AP exam score distributions by subject)
    Data from totalregistration.net/AP-Exam-Registration-Service/2017-AP-Exam-Score-Distributions.php (1 row per exam);

proc import datafile='/folders/myfolders/AP2017ScoreDistributions.xlsx' dbms=xlsx out=APscores replace;

                                                      /* Transform to 1 row per exam/score */
proc transpose data=APscores out=APscores2(rename=(_label_=Score col1=Pct));  
by exam notsorted;

proc sql;                                             /* Calculate pass rate (pass=3/4/5) */
create table APscores3 as                            
select t1.*, t2.pctpass                              
from APscores2 t1
join (select exam, sum(pct) as pctpass from APscores2
      where score between '3' and '5' group by 1) t2 on t1.exam=t2.exam
order by pctpass, exam;                               /* Subjects displayed in hi->lo pass % order */

data ScoresAttrMap;                                   /* Use attribute map to assign colors */
retain id "scoresID";                                 /* Greens=Pass (5/4/3), Reds=Fail (2/1) */
input value : $1. fillcolor : $15.@@;
cards;
5 LIGHTGREEN 4 FORESTGREEN 3 DARKGREEN 2 RED 1 DARKRED
;                                                     /* Plot score distributions */
ods listing image_dpi=140 gpath='/folders/myfolders'; 
ods graphics on / reset antialias width=14in height=11in imagename="2017APSCORES" imagefmt=gif;                  
proc sgplot data=APscores3 dattrmap=ScoresAttrMap noborder;
title bold "2017 AP EXAM SCORE DISTRIBUTIONS";
xaxis valueattrs=(size=6pt) display=(nolabel) refticks=(values);
yaxis valueattrs=(size=8pt) display=(nolabel noline noticks) discreteorder=data reverse;
hbar exam / response=pct group=score datalabel=pct barwidth=1 
            attrid=scoresID dataskin=crisp name="scores" grouporder=descending;
yaxistable pct / labelattrs=(size=7pt) valueattrs=(size=7pt) titleattrs=(size=7pt);
keylegend "scores" / position=bottom valueattrs=(size=7pt);

 

INPUT DATA SCREENSHOT (cut-and-pasted from totalregistration.net)

APscoredata.jpg

 


Accepted Solutions
Solution
3 weeks ago
SAS Super FREQ
Posts: 1,080

Re: Fun With SAS ODS Graphics: 5-4-3-2-1 AP Exam Scores!

Very nice, TC.  If you have SAS 9.40M3, you can make the color swatches of the legend bigger.  See FILLHEIGHT, FILLASPECT or AUTOITEMSIZE in KEYLEGEND statement.

 

Also, I wonder how the visual would look if you were to center the  boundry between "Pass" and "Fail". 

Sort of like the 3rd graph in this article: http://blogs.sas.com/content/graphicallyspeaking/2014/10/30/likert-graphs/

 

View solution in original post


All Replies
Solution
3 weeks ago
SAS Super FREQ
Posts: 1,080

Re: Fun With SAS ODS Graphics: 5-4-3-2-1 AP Exam Scores!

Very nice, TC.  If you have SAS 9.40M3, you can make the color swatches of the legend bigger.  See FILLHEIGHT, FILLASPECT or AUTOITEMSIZE in KEYLEGEND statement.

 

Also, I wonder how the visual would look if you were to center the  boundry between "Pass" and "Fail". 

Sort of like the 3rd graph in this article: http://blogs.sas.com/content/graphicallyspeaking/2014/10/30/likert-graphs/

 

Community Manager
Posts: 2,692

Re: Fun With SAS ODS Graphics: 5-4-3-2-1 AP Exam Scores!

Thanks for this @tc. I shared with my daughter, who took 4 of these exams this past May (Stat, Psych, Eng Lit, and Music Theory).  She hasn't yet received her scores, but she certainly hopes to be "in the green" for all of them!

☑ This topic is SOLVED.

Need further help from the community? Please ask a new question.

Discussion stats
  • 2 replies
  • 337 views
  • 1 like
  • 3 in conversation