/* 1. HTML output file location */ %let proj_path = C:\gmap_sas_ods; filename fout "&proj_path\gmap_sas_ods.html"; /* 2. data preparation */ data places; length place $25; input place $ 1-15 lat 17-25 lng 27-36; format lat lng 12.6; datalines; Washington, DC 38.917117 -77.041187 Rockville, MD 39.087870 -77.173023 Baltimore, MD 39.292230 -76.623707 Frederick, MD 39.411165 -77.433948 Manassas, VA 38.754520 -77.494373 ; run; data sasusers; length place $25; input place $ 1-15 saslevel 17-17 count 20-24; datalines; Washington, DC 2 10000 Washington, DC 1 570 Washington, DC 3 1450 Washington, DC 4 14000 Washington, DC 5 350 Rockville, MD 2 1500 Rockville, MD 1 430 Rockville, MD 3 560 Rockville, MD 4 1400 Rockville, MD 5 500 Baltimore, MD 2 2000 Baltimore, MD 1 680 Baltimore, MD 3 1850 Baltimore, MD 4 2500 Baltimore, MD 5 850 Frederick, MD 2 550 Frederick, MD 1 65 Frederick, MD 3 430 Frederick, MD 4 835 Frederick, MD 5 230 Manassas, VA 2 510 Manassas, VA 1 120 Manassas, VA 3 360 Manassas, VA 4 424 Manassas, VA 5 55 ; run; proc format; value levelf 1 = 'Expert' 2 = 'Solid' 3 = 'Learning' 4 = 'Clueless' 5 = 'Other' ; run; /* 3. create local weather mini-pages */ %macro create_sas_outputs; %let dsid = %sysfunc(open(places)); %let num = %sysfunc(attrn(&dsid,nlobs)); %let rc = %sysfunc(close(&dsid)); filename odsout "&proj_path\infopages"; %do j=1 %to # data _null_; p = &j; set places point=p; call symput('placename',place); stop; run; ods html path=odsout file="place&j..html" style=styles.seaside; goptions reset=all device=actximg colors=() htext=9pt hsize=3in vsize=1.5in; title1 bold h=10pt color=cx3872ac "SAS user levels in &placename"; axis1 label=none; axis2 label=none value=none minor=none major=none; proc gchart data=sasusers(where = (place eq "&placename")); vbar saslevel / sumvar = count width = 10 outside = sum raxis = axis2 maxis = axis1 cframe = white nozero discrete ; format count comma15. saslevel levelf.; run; quit; ods html close; %end; %mend create_sas_outputs; %create_sas_outputs; /* 4. Determine map center */ proc means data=places noprint; var lat lng; output out=dataspan (keep=minlat maxlat minlng maxlng) min(lat)=minlat max(lat)=maxlat min(lng)=minlng max(lng)= maxlng; run; data centerdata; set dataspan; clat = minlat + (maxlat - minlat)/2; clng = minlng + (maxlng - minlng)/2; run; /* 5. initialize map */ data _null_; file fout; set centerdata; put '' / '' / '' / '

Sample of Google map with embedded SAS ODS output

' / '

Click on a marker to view information about this location.

' / '
x
' / '' ; run;