st: RE: Distance matrix

 From "Scott Merryman" <[email protected]> To <[email protected]> Subject st: RE: Distance matrix Date Thu, 16 Jun 2005 13:58:26 -0500

Dan,

Here is one way.  I am not sure about your distance formulas, so I used the
Pythagorean distance formula.

. l, noobs

+------------------------------+
| points   latitude   longit~e |
|------------------------------|
|      a          2          5 |
|      b          4          9 |
|      c          9          4 |
|      d          1          0 |
|      e          2          0 |
+------------------------------+

qui {
local j = 2
count
local num = r(N)
levels points, local(levels) clean
foreach l in `levels' {
local k = 1
gen `l' = .
forv i = `j'/`num' {
*replace `l'=acos( (cos(latitude[`i'])*cos(latitude[`i' -
`k'])*cos(longitude[`i'] - longitude[`i' - `k'])) + ///
(sin(latitude[`i'])*sin(latitude[`i' - `k'])) )*3963 in `i'

replace `l' = sqrt((abs(latitude[`i'] - latitude[`i'
-`k']))^2 + ///
(abs(longitude[`i'] - longitude[`i' - `k']))^2) in `i'

local k = `k' + 1
}
local j = `j' + 1
}
}
l points a-e, noobs

. l points a-e, noobs

+-------------------------------------------------+
| points          a          b          c   d   e |
|-------------------------------------------------|
|      a          .          .          .   .   . |
|      b   4.472136          .          .   .   . |
|      c   7.071068   7.071068          .   .   . |
|      d    5.09902   9.486833   8.944272   .   . |
|      e          5   9.219544   8.062258   1   . |
+-------------------------------------------------+

Hope this helps,
Scott

> -----Original Message-----
> From: [email protected] [mailto:owner-
> [email protected]] On Behalf Of Daniel Egan
> Sent: Monday, June 13, 2005 1:03 PM
> To: [email protected]
> Subject: st: Distance matrix
>
> hello all,
>
> I am attempting to create a dataset consisting of the distance between
> two points.. Currently, the dataset is in a wide format consisting of
> latitude and longitude in the form xx.xxxxxxxxxx
>
> id     x     y
> a     2     5
> b     4     9
> c     9     4
> .........
>
>
>
> I would like to end up with a dataset consisting of the Euclid distance.
>
> pair     dist
> a-b     4.5...
> a-c     7.01...
>
> I believe the formula is:
> distance=arcos( (cos(rlat1)*cos(rlat2)*cos(rlon1-rlon2)) +(sin(rlat1)*sin
> (rlat2)) )*3963
>
> I have tried
> mds latitude longitude, id(pid)
>  and returned "too many macros". I do have aroun 43k observations.
>
> Any guidance or assistance would be greatly appreciated.
>
>
> Cheers ,
> Dan Egan
>
> *
> *   For searches and help try:
> *   http://www.stata.com/support/faqs/res/findit.html
> *   http://www.stata.com/support/statalist/faq
> *   http://www.ats.ucla.edu/stat/stata/

*
*   For searches and help try:
*   http://www.stata.com/support/faqs/res/findit.html
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/