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: Using the foreach command to solve a problem with multilevel data

 From Eric Booth To statalist@hsphsun2.harvard.edu Subject Re: st: Using the foreach command to solve a problem with multilevel data Date Wed, 17 Mar 2010 01:20:10 -0500

```<>
Here's one way to get you there...

*********
clear
inp groupid        subjectid   authority    age     meanage
1                      1            1            25           26
1                      2            1            25           26
1                      3            1            28           26
1                      4            2            28           28.5
1                      5            2            29           28.5
1                      6            3            34           34
1                      7            3            34           34
1                      8            4            40           42
1                      9            4            44           42
1                     10           5            50           50
2                     11           1            23           23.5
2                     12           1            24           23.5
2                     13           2            30           31
2                     14           2            31           31
2                     15           2            32           31
2                     16           3            36           37
2                     17           3            38           37
2                     18           4            44           46
2                     19           4            48           46
2                     20           5            50           51
2                     21           5            52           51
end

**bysort groupid authority: egen meanage = mean(age)**
g meanageup = .
bys groupid :  replace meanageup =  meanage[_n+1]  ///
if authority[_n]!=authority[_n+1]
bys groupid authority: egen m1 = max(meanageup)
bys groupid authority: replace meanageup = m1
drop m1
**
li, noobs
*********

~ Eric
__
Eric A. Booth
Public Policy Research Institute
Texas A&M University
ebooth@ppri.tamu.edu
Office: +979.845.6754

On Mar 17, 2010, at 12:58 AM, John Marvel wrote:

I have data on individuals ("subjectid") nested in groups ("groupid").
Within groups, individuals have varying levels of authority
("authority"), ranging from a low of 1 to a high of 5.  I also have
data on each individual's age ("age").  I have created a variable
called "meanage," which equals the within-group mean of age for each
authority level:

bysort groupid authority: egen meanage = mean(age)

What I want to do is create a new variable (call it "meanageup") that,
for individual i (in group g) with authority level a, is equal to
"meanage" for authority level a + 1 (in group g).  In other words, if an
individual in group x has an authority level of 1, I want "meanageup"
for that individual to equal the mean age of all group x individuals
who have an authority level of 2.  And if an individual in group x has
an authority level of 2, I want "meanageup" for that individual to
equal the mean age of all group x individuals who have an authority
level of 3, etc.

For an idea of what the data look like, see below.
Thus, for subjectids 1, 2, and 3, I want "meanageup" to equal 28.5;
for subjectids 4 and 5, I want "meanageup" to equal 34, etc.  Because
the data set is large, I'd like to automate this as much as possible.
(It's not clear to me how I would do this with the foreach
command, and I haven't been able to track down an
answer in the statalist archives or elsewhere online).

groupid        subjectid   authority    age     meanage
1                      1            1            25           26
1                      2            1            25           26
1                      3            1            28           26
1                      4            2            28           28.5
1                      5            2            29           28.5
1                      6            3            34           34
1                      7            3            34           34
1                      8            4            40           42
1                      9            4            44           42
1                     10           5            50           50
2                     11           1            23           23.5
2                     12           1            24           23.5
2                     13           2            30           31
2                     14           2            31           31
2                     15           2            32           31
2                     16           3            36           37
2                     17           3            38           37
2                     18           4            44           46
2                     19           4            48           46
2                     20           5            50           51
2                     21           5            52           51

I would greatly appreciate any suggestions.

Thank you very much,

John
*
*   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/
```