Online File
Rick Aster: Professional SAS Programming Shortcuts: Contents
* Convert coordinates to degrees N and degrees E;
data cities (keep=city lati long);
infile cities;
input city $char20. lati_d 2. +1 lati_m 2. +1 lati_ns $char1.
+1 long_d 3. +1 long_m 2. +1 long_ew $char1.;
lati = lati_d + lati_m/60;
if lati_ns = 'S' then lati = -lati;
long = long_d + long_m/60;
if long_ew = 'W' then long = -long;
run;
title 'Distances Between Cities';
data _null_;
retain diameter 12741; * Approximate earth diameter (km);
retain r .017453292; * Factor to convert degrees to radians;
file print column=column;
if _n_ = nobs then stop;
set cities (rename=(city=city1 lati=lati1 long=long1));
put / 'FROM ' city1 'TO:' +3 @;
do point = _n_ + 1 to nobs;
set cities (rename=(city=city2 lati=lati2 long=long2))
point=point nobs=nobs;
distance = diameter*arsin(sqrt(
(1 - cos(lati1*r)*cos(lati2*r)*cos((long1 - long2)*r)
- sin(lati1*r)*sin(lati2*r))*.5));
if column > 60 - length(city2) then put / @2 @;
put city2 distance : comma7. +2 @;
end;
run;