BookmarkSubscribeRSS Feed
tc
Lapis Lazuli | Level 10 tc
Lapis Lazuli | Level 10

RefugeeAdmissions.png

 

As I copped to in an old SGF paper, I'm not adverse to "borrowing" from Robert Allison's amazing-and-ever-growing SAS dataviz collection. So, when the idea of trying to implement Robert's SAS/GRAPH-based Trends in U.S. refugee admissions chart with SGPANEL was floated, well, I just had to give it a shot. Results above, code below. Not a replica, admittedly. With his uniscaled-but-not-space-wasting y-axes, consistent color usage, floating country labels, custom x-axis labels at the top and bottom, etc., Robert's chart is far more nuanced. Still, the SGPLOT version may be good enough for many people's purposes, and doesn't require much work. So, which way to go probably boils down to an impact-vs-effort decision on your part (and which software you have access to!). Now, how about someone coughing up a SAS Visual Analytics-based version so we can complete the trilogy? 🙂

 

* Fun w/SAS ODS Graphics: SGPLOT take on SAS/GRAPH-based "Trends in U.S. refugee admissions" chart
  Based on SAS/GRAPH chart at blogs.sas.com/content/sastraining/2017/10/03/trends-in-u-s-refugee-admissions/
  Data sourced from wrapsnet.org/s/Graph-Refugee-Admissions-since-19759517.xls;

*==> Step 1: Get Excel data, transform it from Excel chart structure to relational;

proc import out=Admissions dbms=xls replace
            datafile ='/folders/myfolders/Graph+Refugee+Admissions+since+1975(9.5.17).xls';
            getnames=no; range="FY 1975-2017$A10:K52";
            
data AdmissionsNorm(keep=year country refugees);
array countries (8) $30. _temporary_ ("Africa" "Asia" "Europe" "Former Soviet Union" 
      "Kosovo" "Latin American Caribbean" "Near East South Asia" "PSI");
array numrefugees (8) b c e f g h i j;
set admissions;
year=a;
do sub=1 to 8;
  country=countries(sub);
  refugees=numrefugees(sub);
  output;
end;   

*==> Step 2: Produce the paneled chart!;

ods graphics / antialias height=14in width=8.5in;
proc sgpanel noautolegend;
title  height=12pt "U.S. Refugee Admissions by Region";
title2 height=10pt "Fiscal Year 1975 through Aug 31, 2017 (FY ends Sep 30)";
panelby country / onepanel uniscale=column noheader columns=1 spacing=3;
vbar year / response=refugees group=country transparency=.4;
inset country / nolabel textattrs=(size=14pt) position=topright;
colaxis display=(nolabel) grid valueattrs=(size=7pt) valuesrotate=vertical;
rowaxis display=(nolabel) grid valuesformat=comma11. valueattrs=(size=7pt); 
refline (1975 to 2015 by 5) / axis=x;
footnote height=8pt "Data source: Refugee Processing Center (wrapsnet.org/admissions-and-arrivals/)";

 

3 REPLIES 3
Jay54
Meteorite | Level 14

Nicely done, TC.  You have specified UNISCALE=column. It is also useful to keep the default view so each cell y-axis is uniform, allowing visual comparison of the values.  I like your usage of INSET for the class values suppressing the row header.  Easier to read.  I was happy to learn some data step coding using arrays, as used by you.

Renato_sas
SAS Employee

Hi @tc,

 

Nice work!

 

"Now, how about someone coughing up a SAS Visual Analytics-based version so we can complete the trilogy?"

Challenge accepted! I'll pull something in VA and share with the community 🙂

 

Best,

Renato

SAS Innovate 2025: Save the Date

 SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!

Save the date!

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 3 replies
  • 2218 views
  • 15 likes
  • 3 in conversation