I have the following data
PS Lat Long SLOT
abc 75.8233 26.2454 1
abc 75.4785 26.4589 1
abc 75.5495 26.4679 1
abc 75.4875 26.8997 2
abc 75.5649 26.7268 2
abc 75.5666 26.8647 2
xyz 75.4875 26.3842 1
xyz 75.4937 26.5877 1
xyz 75.8473 26.3971 1
.... ............. ............. ..
Now I want a new column which shows the distances in the following way:
All the points with PS=abc and Slot=1 should have their distances calculated from the first point of this group(i.e., 75.8233 26.2454), similarly all the points with PS=abc and Slot=2 should have their distances calculated from the first point of this group(i.e., 75.4875 26.8997) and so on.
So please suggest me a solution for this.
Also the points should not be entered manually, a programmable solution is needed.
Post test data in the form of a datastep, we are not here to type test data in nor guess what the structure is. Hence this code is just a guess, also the output is a guess as you have not shown what you want out.
data first; set have; by ps slot; if first.slot then output; run; data want; merge have first (rename=(lat=comp_lat long=comp_long)); by ps slot; dist=lat - comp_lat; dist2=long - comp_long; run;
Post test data in the form of a datastep, we are not here to type test data in nor guess what the structure is. Hence this code is just a guess, also the output is a guess as you have not shown what you want out.
data first; set have; by ps slot; if first.slot then output; run; data want; merge have first (rename=(lat=comp_lat long=comp_long)); by ps slot; dist=lat - comp_lat; dist2=long - comp_long; run;
You owe me one hundred dollars .
data have;
input PS $ Lat Long SLOT;
cards;
abc 75.8233 26.2454 1
abc 75.4785 26.4589 1
abc 75.5495 26.4679 1
abc 75.4875 26.8997 2
abc 75.5649 26.7268 2
abc 75.5666 26.8647 2
xyz 75.4875 26.3842 1
xyz 75.4937 26.5877 1
xyz 75.8473 26.3971 1
;
run;
data first rest;
set have;
by ps slot;
if first.slot then output first;
else output rest;
run;
proc sql;
select b.*,1000*geodist(a.lat,a.long,b.lat,b.long,'k') as distance_in_meters
from first as a,rest as b
where a.ps=b.ps and a.slot=b.slot ;
quit;
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.