Notice: On March 31, it was announced that Statalist is moving from an email list to a forum. The old list will shut down on April 23, and its replacement, statalist.org is already up and running.

# Re: st: looping with geodist

 From Robert Picard To statalist@hsphsun2.harvard.edu Subject Re: st: looping with geodist Date Fri, 7 May 2010 10:11:33 -0400

```If you have two kinds of locations, then the easiest solution is not
to append both datasets but to do an unmatched merge. This puts each
set of observations side-to-side and it's easier to manage. Here's an
updated version of my example; the looping is over all observations of
the second dataset. Hope this helps,

Robert

*--------------------------- begin example -----------------------
version 11

* This example require my -geodist- program available on SSC
* To install: ssc install geodist

clear all
set obs 5
set seed 1234
gen lat1 = 37 + (41 - 37) * uniform()
gen lon1 = -109 + (109 - 102) * uniform()
gen x1 = round(uniform()*100)
tempfile f
save "`f'"

clear
set obs 3
gen lat2 = 37 + (41 - 37) * uniform()
gen lon2 = -109 + (109 - 102) * uniform()
gen x2 = round(uniform()*100)

merge 1:1 _n using "`f'", nogen
list

gen x3 = .
count if x2 != .
local nobs = r(N)

forvalues i = 1/`nobs' {
geodist lat1 lon1 `=lat2[`i']' `=lon2[`i']', gen(d)
gen xtemp = x1 / d
sum xtemp, meanonly
qui replace x3 = r(sum) + x2[`i'] in `i'
list
drop d xtemp
}
*--------------------- end example --------------------------

On Fri, May 7, 2010 at 4:35 AM, Frederick Guy <f.guy@bbk.ac.uk> wrote:
> Robert Picard sent the code below, which works as advertised - many thanks, Robert! Now I have a slightly different problem: I have two kinds of locations in the data, i and j. For each location of type i, I need to compute the distances to every location of type j. If I just stack observations type i on top of observations type j, geodist doesn't like the missing values (observations type i have missing values for type j, and vice versa). Can anybody suggest a solution?
>
> -----Original Message-----
> From: owner-statalist@hsphsun2.harvard.edu [mailto:owner-statalist@hsphsun2.harvard.edu] On Behalf Of Robert Picard
> Sent: 30 April 2010 17:09
> To: statalist@hsphsun2.harvard.edu
> Subject: Re: st: RE: RE: RE: AW: Creating index relative to other observations
>
> Perhaps the following example is close to what you are trying to do.
> It loops through all observations. Each time, it calculates the
> distance from observation `i' to all others (distance will be missing
> for the observation `i'). Values for variable x1 are adjusted
> according to the distance to `i' and summed. The observation `i' of x3
> is then updated with the value of the sum plus the value of x2 for
> observation `i'.
>
> Hope this helps,
>
> Robert
> http://robertpicard.com/
>
> *--------------------------- begin example -----------------------
> version 11
>
> * This example require my -geodist- program available on SSC
> * To install: ssc install geodist
>
> clear all
> set obs 5
> set seed 1234
> gen lat = 37 + (41 - 37) * uniform()
> gen lon = -109 + (109 - 102) * uniform()
> gen x1 = round(uniform()*100)
> gen x2 = round(uniform()*100)
> gen x3 = .
>
> forvalues i = 1/`c(N)' {
>        geodist lat lon `=lat[`i']' `=lon[`i']' if _n != `i', gen(d)
>        gen xtemp = x1 / d
>        sum xtemp, meanonly
>        qui replace x3 = r(sum) + x2 in `i'
>        list
>        drop d xtemp
> }
> *--------------------- end example --------------------------
>
>
> On Fri, Apr 30, 2010 at 7:49 AM, Frederick Guy <f.guy@bbk.ac.uk> wrote:
>> Many thanks. Now for a crash-course in MATA...
>>
>> -----Original Message-----
>> From: owner-statalist@hsphsun2.harvard.edu
>> [mailto:owner-statalist@hsphsun2.harvard.edu] On Behalf Of Nick Cox
>> Sent: 29 April 2010 19:22
>> To: statalist@hsphsun2.harvard.edu
>> Subject: st: RE: RE: AW: Creating index relative to other observations
>>
>> I'd do this in Mata. Mata has a -for- loop.
>>
>> Nick
>> n.j.cox@durham.ac.uk
>>
>> Frederick Guy
>>
>> Thanks, I guess I was unclear on this aspect of the problem. For each
>> observation, the sum I'm talking about is of measurements made relative
>> to all other observations (or more generally, to some set of other
>> observations) in the sample.
>>
>> Martin Weiss
>>
>> ".. sum up the results of these computations,".
>>
>> Creating sums can mean different things in Stata. It may sound trite,
>> but
>> the easiest is simply to -generate- a sum by adding values with a "+"
>> sign.
>> If you want the total of a variable, look at -egen, total()-. If you
>> want a
>> running sum, take a look at -help sum()-.
>>
>> Frederick Guy
>>
>> I have need to use information from all observations (about 1800 of
>> them) to create a new variable.
>>
>> The variable created is a weighted sum of the inverse of geographical
>> distances between observation i and all j n.e. i. I have longitude and
>> latitude for each observation, and computation of the distance from any
>> i to any j is straightforward. What I don't know is how to get Stata to
>> loop over all observation and sum up the results.
>>
>> For every observation i, I think I need to
>>
>> (a) loop through all j n.e. I, doing computations involving variables
>> x1, x2(i) and x1, x2(j), and then
>>
>> (b) sum up the results of these computations, returning a value which
>> becomes variable x3 for that i.
>>
>> I expect there's a straightforward way to do this. Any suggestions?
>>
>> *
>> *   For searches and help try:
>> *   http://www.stata.com/help.cgi?search
>> *   http://www.stata.com/support/statalist/faq
>> *   http://www.ats.ucla.edu/stat/stata/
>>
>> *
>> *   For searches and help try:
>> *   http://www.stata.com/help.cgi?search
>> *   http://www.stata.com/support/statalist/faq
>> *   http://www.ats.ucla.edu/stat/stata/
>>
>
> *
> *   For searches and help try:
> *   http://www.stata.com/help.cgi?search
> *   http://www.stata.com/support/statalist/faq
> *   http://www.ats.ucla.edu/stat/stata/
>
> *
> *   For searches and help try:
> *   http://www.stata.com/help.cgi?search
> *   http://www.stata.com/support/statalist/faq
> *   http://www.ats.ucla.edu/stat/stata/
>

*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/
```