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.

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

From |
Robert Picard <picard@netbox.com> |

To |
statalist@hsphsun2.harvard.edu |

Subject |
Re: st: looping with geodist |

Date |
Sat, 8 May 2010 10:13:42 -0400 |

The version 10 syntax is "merge using "`f'" Robert On Sat, May 8, 2010 at 5:38 AM, Frederick Guy <f.guy@bbk.ac.uk> wrote: > Thanks again, Robert. This looks good. Just one (I hope) more question: I'm using Stata 10, and am not sure what the equivalent of "merge 1:1 _n" is. > > > -----Original Message----- > From: owner-statalist@hsphsun2.harvard.edu [mailto:owner-statalist@hsphsun2.harvard.edu] On Behalf Of Robert Picard > Sent: 07 May 2010 15:12 > To: statalist@hsphsun2.harvard.edu > Subject: Re: st: looping with geodist > > 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/ > > * > * 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/

**References**:**st: looping with geodist***From:*"Frederick Guy" <f.guy@bbk.ac.uk>

**Re: st: looping with geodist***From:*Robert Picard <picard@netbox.com>

**RE: st: looping with geodist***From:*"Frederick Guy" <f.guy@bbk.ac.uk>

- Prev by Date:
**Re: st: gradient in -ml- producing type mismatch?** - Next by Date:
**st: How to test for the existence of heterogeneity using STATA** - Previous by thread:
**RE: st: looping with geodist** - Next by thread:
**Re: st: looping with geodist** - Index(es):