Ok - then here's a way to do that, using brute force (and the sashelp.zipcode dataset).
You might refine this to make it a little less code, and more efficient - but I like to take things 1 step at a time, to make it simpler to understand. 🙂
data foo; input customer_number lat long; datalines; 1 35.8227817 -78.755733 2 38.8976398 -77.036627 ; run;
/* Create all possible pairs of my data, and zipcode lat/longs */ proc sql; create table pairs as select unique foo.*, zipcode.zip, zipcode.city, zipcode.x, zipcode.y from foo, sashelp.zipcode where zipcode.x^=. and zipcode.y^=.; quit; run;
/* calculate distance between each customer and each zipcode centroid */ data pairs; set pairs; Distance = geodist(lat, long, y, x, 'DM'); run;
/* find the closest zipcode to each customer */ proc sort data=pairs out=pairs; by customer_number distance; run; data pairs; set pairs (keep = customer_number lat long zip city); by customer_number; label zip='Closest Zipcode'; if first.customer_number then output; run;
... View more