Driving Distances and Times Using SAS and Google Maps

Driving Distances and Times Using SAS® and Google Maps
Mike Zdeb
University at Albany School of Public Health
# WHY ... STUDY OF MOTHERS AND
INFANTS IN NEW YORK STATE
# 1,000+ MOMS AND THREE CLINICS
# WHICH CLINIC IS CLOSEST TO EACH MOM
# WHAT IS THE DRIVE TIME TO THAT CLINIC
# SATISFIED WITH DISTANCE BETWEEN ZIP
CENTROIDS ... NOT USING STREET
ADDRESS
# USE SASHELP.ZIPCODE TO FIND LATITUDE
AND LONGITUDE OF CENTROIDS FOR
MOMS AND CLINICS
# WHERE ARE CLINICS AND MOMS
# EASY TO CALCULATE STRAIGHT LINE
DISTANCE
# FUNCTIONS IN V9.2
GEODIST ... SPECIFY LATITUDE AND
LONGITUDE FOR TWO LOCATIONS
ZIPCITYDISTANCE ... SPECIFY TWO ZIPS
(ACCESSES LAT/LONG IN SASHELP.ZIPCODE)
# PRIOR TO V9.2
HAVERSINE FORMULA
"... GREAT‐CIRCLE DISTANCES BETWEEN TWO
POINTS ON A SPHERE FROM THEIR
LONGITUDES AND LATITUDES ..."
V9.2 FUNCTIONS USE THE VINCENTY
FORMULA (MORE ACCURATE AND MORE
COMPLICATED THAN HAVERSINE)
# DRIVING DISTANCE ... 383 MILES
# DRIVING TIME ... 6 HOURS 45 MINUTES # IN DIRECTIONS BOX
CLICK ON LINK
# COPY LINK AND IT LOOKS AS FOLLOWS ...
https://maps.google.com/maps?saddr=Albany,+NY&daddr=
Toronto,+ON&hl=en&ll=43.237199,‐76.442871&spn=4.554
025,7.003784&sll=42.652579,‐73.756232&sspn=0.287351,0
.437393&geocode=FaPTigIduJGa‐ylL‐0_MNAreiTHEKOegEm
Oh4Q%3BFWoYmgIdcLVE‐ymlO8bXkMvUiTF3xLQqUFU1Mg
&mra=ls&t=m&z=8
# SHORT URL ... http://goo.gl/maps/w3K3
# MINIMUM INFO FOR GOOGLE MAP
# MORE DETAILS ON THE SAS COMMUNITY
WEB SITE ... SEARCH FOR "driving
distance"
%let ll1=%str(42.73,‐73.80);
%let ll2=%str(43.73,‐79.38);
* URL access method;
filename x url "http://maps.google.com/maps?daddr=&ll2.%nrstr(&saddr)=&ll1";
filename z temp;
* store web page contents in file TEMP;
data _null_; infile x recfm=f lrecl=1 end=eof; file z recfm=f lrecl=1;
input @1 x $char1.; put @1 x $char1.;
if eof;
call symputx('filesize',_n_);
run;
* find distance and time in file TEMP;
data _null_;
infile z recfm=f lrecl=&filesize. eof=done;
input @ '<div class="altroute‐rcol altroute‐info"> <span>' @;
input text $50.;
distance = input(scan(text,1," "),comma12.);
units = scan(text,2,"< ");
time = scan(text,5,"<>"); file print;
put "DRIVING DISTANCE BETWEEN &ll1 AND &ll2 : " distance units" (TIME: " time ")";
stop;
done:
file print;
put "CANNOT FIND THE DRIVING DISTANCE BETWEEN &ll1 AND &ll2 : " /
"TRY ANOTHER PAIR OF COORDINATES"; stop;
run;
* clear file names;
filename x; filename z;
# POSTAL CODES
* enter two zip codes;
%let z1=12203;
%let z2=M4W1A1;
filename x url
"http://maps.google.com/maps?daddr=&z2.%nrstr(&saddr)=&z1";
filename z temp; <SAME SAS CODE AS WITH LAT/LONG>
DRIVING DISTANCE BETWEEN 12203 AND
M4W1A1 : 379 mi (TIME: 6 hours 41 mins )
EXAMPLE APPLICATION ... FIND DRIVING
DISTANCE AND TIME TO ZIP 12203 (CITY OF
ALBANY) FOR POPULATION IN COUNTIES THAT
SURROUND ALBANY COUNTY
# ZIP 12203 COULD BE THE LOCATION OF A
HOSPITAL, STORE, ETC.
# USE SAS AND GOOGLE MAPS TO FIND
DRIVING DISTANCE AND TIME
# MERGE DATA WITH ZIP‐SPECIFIC
POPULATION DATA
# USE PROC UNIVARIATE TO FIND
PERCENTAGE OF POPULATION WITH
VARIOUS DISTANCES AND TIMES TO ZIP
12203
# 50% OF POPULATION 17.1 MILES AND 23
MINUTES FROM ZIP 12203
# Work was funded in part by NIH grant
HHSN267200700019C from the Eunice
Kennedy Shriver National Institute of
Child Health and Human Development
# ANOTHER APPROACH ...