Thanks for the compliment, but why the -if-?
If -mlineno- is missing, age[.] will be too,
and so the -if- is redundant.
Nick
[email protected]
> -----Original Message-----
> From: [email protected]
> [mailto:[email protected]]On Behalf Of
> Ulrich Kohler
> Sent: 15 September 2004 17:48
> To: [email protected]
> Subject: st: Re: How to speed up loop
>
>
> Nick's approach is much better than mine. But probably with
> an if qualifier:
>
> . by hhid : gen mage = age[mlineno] if mlineno < .
>
> uli
>
> Nick Cox wrote:
> > Looks like
> >
> > by hhid : gen mage = age[mlineno]
> >
> > to me. No loops, no -merge-.
> >
> > Nick
> > [email protected]
> >
> > Friedrich Huebler
> >
> > > I appreciate the responses that I received so far but
> realize that my
> > > initial message was not precise enough.
> > >
> > > The variable mlineno lists the line number of a household member's
> > > mother. In household 1 in my example data, household
> member 2 is the
> > > mother of household member 3. In household 2, 1 is the
> mother of 2,
> > > and 3 is the mother of 4 and 5. I would like to create a variable
> > > that lists the age of each household member's mother. The result
> > > should look like this:
> > >
> > > hhid lineno age mlineno mage
> > > 1 1 32 . .
> > > 1 2 30 . .
> > > 1 3 5 2 30
> > > 2 1 68 . .
> > > 2 2 41 1 68
> > > 2 3 40 . .
> > > 2 4 17 3 40
> > > 2 5 14 3 40
> > >
> > > The loop that I am using to create the variable mage
> works perfectly
> > > but it is very slow with a large number of observations.
> > >
> > > Friedrich
> > >
> > > --- Friedrich Huebler <[email protected]> wrote:
> > > > I am looking for advice to speed up a loop. The loop determines
> > > > characteristics of other household members in household
> survey data
> > > > and is taken from this Stata FAQ:
> > > >
> > > > http://www.stata.com/support/faqs/data/members.html
> > > >
> > > > The data has the variables hhid (household ID), lineno
> (line number
> > > > of household member), age, and mlineno (mother's line number).
> > > >
> > > > hhid lineno age mlineno
> > > > 1 1 32 .
> > > > 1 2 30 .
> > > > 1 3 5 2
> > > > 2 1 68 .
> > > > 2 2 41 1
> > > > 2 3 40 .
> > > > 2 4 17 3
> > > > 2 5 14 3
> > > >
> > > > The following code creates the variable mage with the
> mother's age.
> > > >
> > > > gen byte mage=.
> > > > sum lineno, meanonly
> > > > forvalues i = 1/`r(max)' {
> > > > gen byte tag = 1 if lineno==`i'
> > > > bysort hhid: egen byte iage = max(tag*age)
> > > > replace mage=iage if mlineno==`i'
> > > > drop tag iage
> > > > }
> > > >
> > > > I tried changing -bysort hhid- to -by hhid- but the
> time needed for
> > > > the loop is the same. Running the loop -quietly- also makes no
> > > > difference. Can anything be done to make this loop go faster?
> >
> > *
> > * 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/
>
> --
> [email protected]
> +49 (030) 25491-361
>
>
> *
> * 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/