%let name=baby_names_2014;
filename odsout '.';

/*
Imitating/improving map from:
http://dadaviz.com/i/4170
Got data from:
http://www.ssa.gov/OACT/babynames/state/top5_2014.html
*/

filename namesurl url "https://www.ssa.gov/OACT/babynames/state/top5_2014.html";

data name_data (drop = whole_line);
infile namesurl lrecl=500 pad;
input whole_line $ 1-500;
length state_name $20;
if index(whole_line,'<tr><td>')^=0 then do;
 state_name=trim(left(scan(scan(whole_line,3,'>'),1,'<')));
 end;
if state_name^='' then do;
 rank=1;
 input whole_line $ 1-100;
 name=trim(left(scan(scan(whole_line,2,'>'),1,'<')));
 input whole_line $ 1-100;
 number=.; number=input(scan(scan(whole_line,2,'>'),1,'<'),comma8.0);
 output;
 end;
run;

data name_data; set name_data (where=(state_name^='Dist. of Columbia')); 
run;
data name_data; set name_data; 
length Gender $6;
if _n_<=50 then gender='Female'; 
else gender='Male';
length my_html $300;
my_html=
 'title='||quote(trim(left(state_name))||': '||trim(left(name)))||
 ' href='||quote(trim(left('baby_names_2014_info.htm')));
run;
 
data my_map; set mapsgfk.us;
state_name=fipnamel(state);
run;

/* Label the map, adapted from some Tech Support code: */
data maplabel; set mapsgfk.uscenter(where=(statecode^='DC'));
original_order=_n_;
state_name=fipnamel(state);
if state_name='Hawaii' then do; 
 x=x-.01; 
 y=y-.01;
 end;
run;

proc sql noprint;
create table maplabel as
select maplabel.*, name_data.gender, name_data.name
from maplabel left join name_data
on maplabel.state_name = name_data.state_name;
quit; run;

proc sort data=maplabel out=maplabel;
by gender original_order;
run;

data maplabel; set maplabel;
length function $8 color $12;
retain flag 0;
xsys='2'; ysys='2'; hsys='3'; when='a'; 
function='label'; style="albany amt/bold"; position='5';
color='gray55';
text=trim(left(name)); 
if ocean='Y' then do;                          
 position='6'; 
 output;    
 function='move';                                                      
 flag=1;
 end;
else if flag=1 then do;                                                                   
 function='draw'; 
 size=.25;
 flag=0;
 end;
output;
run;


goptions device=png xpixels=900;
goptions noborder; 

ODS LISTING CLOSE;
ODS HTML path=odsout body="&name..htm" 
 (title="Top Baby Names in 2014") 
 style=analysis;

goptions gunit=pct ftitle='albany amt/bold' ftext='albany amt/bold' htitle=5.0 htext=2.5;
goptions ctext=gray33;

legend1 label=none shape=bar(.18in,.18in);

options nobyline;
title1 
 link="http://www.ssa.gov/OACT/babynames/state/top5_2014.html"
 ls=1.5 "Top " underlin=2 "#byval(gender)" underlin=0 " Baby Names for Births In 2014";

proc gmap map=my_map data=name_data;
by gender;
id state_name;
choro name / anno=maplabel
 legend=legend1
 coutline=gray66
 html=my_html
 des='' name="&name._#byval(gender)";
run;

quit;
ODS HTML CLOSE;
ODS LISTING;
