Statalist The Stata Listserver


[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

RE: st: How to calculate mean of other individuals on the same group


From   "Nick Cox" <n.j.cox@durham.ac.uk>
To   <statalist@hsphsun2.harvard.edu>
Subject   RE: st: How to calculate mean of other individuals on the same group
Date   Wed, 14 Feb 2007 11:37:42 -0000

Ryan's solution is naturally correct. 

mean of others = (sum of all - this value) / (number of values - 1) 

It needs a little care given the possibility of missing values, 
but the -egen- functions do that for you. 

Ryan's code can be telescoped to 

egen sum_var = sum(X), by(group)
egen count_var = count(X), by(group)
gen mean_X = (sum_var - X) / (count_var - 1) 

You could do without -egen-: 

bysort group : gen sum_var = sum(X) 
by group : gen count_var = sum(X < .) 
by group : gen mean_X = (sum_var[_N] - X) / (count_var[_N] - 1) 

In the current version of Stata, -egen, sum()- is there
but hidden: the preferred name is -egen, total()-. 

All this and more is discussed in 

FAQ     . . Creating variables recording prop. of the other members of a group
        4/05    How do I create variables summarizing for each
                individual properties of the other members of a
                group?
                http://www.stata.com/support/faqs/data/members.html

which underlines the scope for solving your problems by looking
at the FAQs, as recommended in the Statalist FAQ. 

Nick 
n.j.cox@durham.ac.uk 

Ryan Herzog replied to Quang Nguyen:

> > A simplified version of my data looks as follows:
> >
> > ID      Group     X
> > 1       a             5
> > 2       a             7
> > 3       a             9
> > 4       a             8
> > 5       b             3
> > 6       b             4
> > 7       b             9
> > ..........................
> >
> > I would like to generate a new variable whose value is the 
> average of
> > other individual in the same group as the concerned individual. For
> > example, for the first individual (ID=1), this will be: 
> (7+9+8)/3= 8.
> > For the 6th individual, this will be (3+9)/2=6 and so on.

> Generate the sum of each group: egen sum_var = sum(X), by(group)
> Subtract the X value for that Id:  gen sum_less =  sum_var - X
> Generate a count variable by group: egen count_var = 
> count(X), by(group)
> Subtract one from count, to exclude the ID's observation: gen 
> count_less 
> = count_var - 1
> gen mean_X = sum_less / count_less

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



© Copyright 1996–2014 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index