Bookmark and Share

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


From   Eric Booth <[email protected]>
To   [email protected]
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
[email protected]
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/


© Copyright 1996–2018 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   Site index