[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: st: exact command for distance ?

From   Roy Wada <[email protected]>
To   <[email protected]>
Subject   RE: st: exact command for distance ?
Date   Thu, 10 Sep 2009 16:13:36 -0700

> Now, I need to write a small do file explaining to STATA to calculate the 
> distance using the following Great Circle Formula: 
> I thought a loop would be the best, but I have small doubts about how 
> to write the command on stata. In particular, I don't exactly know how 
> to tell STATA to use 2 different datasets ... 
> using farms
> forvalues j =1/800
> cross using waterbod
> 3963*acos(sin(y/57.2958)*sin(y2/57.2958)+cos(y/57.2958)*cos(y2/57.2958)*cos((x2/57.2958)-(x/57.2958))),> name near_dist
> sort near_dist
> keep in 1
> label variable dist "nearest waterbody"
> list farm_ID farm_X farm_Y near_dist
> save ?????

If you are asking for general advice on matching, those based on -merge- 
or -cross- will run very slowly, although not as slowly as one-by-one 
comparison within loops whose running time will increase exponentially 
with data size.
If you are asking for a program that will do this in a reasonable amount 
of time, then -distmatch- is available from ssc.
After appending your dataset, the syntax would be:
distmatch, id(id) near(1) long(long) lat(lat)
where id is a unique identifier that should be left missing (replace id=.)
if the observation is to be a non-donor, which in your case would be the farm 
for which the water bodies would be matched.
-distmatch- implements haversine formula, which is almost exactly the same
as the Great Circle Formula and is more accurate when the distance is less 
than 1 mile.
-distmatch- was first discussed here:
Get back to school stuff for them and cashback for you.
*   For searches and help try:

© Copyright 1996–2024 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index