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   "Quang Nguyen" <quangn@gmail.com>
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: How to calculate mean of other individuals on the same group
Date   Wed, 14 Feb 2007 10:38:31 -1000

Dear Nick, Kit, and Ryan:

Thank you so much for helping out with such excellent solutions. I
highlly appreciate it.
Have A Wonderful Day!
Sincerely yours,

Quang
On 2/14/07, Nick Cox <n.j.cox@durham.ac.uk> wrote:
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/

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