# st: Re: How to speed up loop

 From Friedrich Huebler To statalist@hsphsun2.harvard.edu Subject st: Re: How to speed up loop Date Wed, 15 Sep 2004 09:24:55 -0700 (PDT)

```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 <huebler@rocketmail.com> 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?
>
> Thank you,
>
> Friedrich Huebler

__________________________________
Do you Yahoo!?
Yahoo! Mail - 50x more storage than other providers!
http://promotions.yahoo.com/new_mail
*
*   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/
```