Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: st: looping with geodist
From
Robert Picard <[email protected]>
To
[email protected]
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 <[email protected]> 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: [email protected] [mailto:[email protected]] On Behalf Of Robert Picard
> Sent: 30 April 2010 17:09
> To: [email protected]
> 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 <[email protected]> wrote:
>> Many thanks. Now for a crash-course in MATA...
>>
>> -----Original Message-----
>> From: [email protected]
>> [mailto:[email protected]] On Behalf Of Nick Cox
>> Sent: 29 April 2010 19:22
>> To: [email protected]
>> Subject: st: RE: RE: AW: Creating index relative to other observations
>>
>> I'd do this in Mata. Mata has a -for- loop.
>>
>> Nick
>> [email protected]
>>
>> 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/