【问题标题】:Stata - calculate average of everyone in group except current observationStata - 计算除当前观察之外的组中每个人的平均值
【发布时间】:2014-11-09 03:38:51
【问题描述】:

我想计算我所在组的所有成员的平均值,但不包括我自己。假设组变量名为group,我想用Groupval1 的平均值,不包括我自己。我希望创建的新列是avg。数据如下所示(输入了正确的avg 值,因此您可以明白我的意思)。

Obs   Group   val1    avg
1     A       6       8
2     A       8       6
3     B       10      13
4     C       4       4
5     C       2       5
6     C       6       3
7     B       12      12
8     B       14      11

如果我想将自己包括在计算中,那将很简单。我会这样做:

bysort Group: egen avg = mean(val1)

但是我如何在不包括我自己的情况下实现这一点?

【问题讨论】:

标签: stata


【解决方案1】:

一种方法是遍历所有观察结果:

clear
set more off

*----- example data -----

input ///
Obs   str1 Group   val1    avg
1     A       6       8
2     A       8       6
3     B       10      13
4     C       4       4
5     C       2       5
6     C       6       3
7     B       12      12
8     B       14      11
end

list, sepby(Group)

*----- what you want -----

encode Group, gen(group)

gen avg2 = .

forvalues j = 1/`=_N' {

    summarize val1 if group == group[`j'] & _n != `j', meanonly              
    replace avg2 = r(mean) in `j'
}

list, sepby(group)

另一种方法是使用egen 函数:

<snip>    

*----- what you want -----

encode Group, gen(group)

bysort group: egen totval = total(val1)
by group: egen cval = count(val1)
generate avg2 = (totval - val1) / (cval - 1)

list, sepby(group)

网上有一篇很好的文章涵盖了这个主题:

Stata 杂志(2014 年) 14,第 2 期,第 432-444 页, Speaking Stata:自我和他人,作者 尼古拉斯·J·考克斯。

【讨论】:

  • 关键是每个其他值的平均值是(所有的总和 - 这个值)/(所有的计数 - 1),但是缺失会使这个复杂化,所以要小心。
猜你喜欢
  • 1970-01-01
  • 2019-09-01
  • 2017-01-02
  • 2021-06-24
  • 2016-06-21
  • 1970-01-01
  • 1970-01-01
  • 2016-01-08
  • 1970-01-01
相关资源
最近更新 更多