Stata 计算组内所有不同值的平均值

Stata 计算组内所有不同值的平均值,stata,Stata,我有两列数据 其中一个具有组的标签,另一个显示每个组中项目的值。我想计算每个组的平均值,只计算那些不同的值 在斯塔塔我怎么做 编辑: 请参见下面的“我的数据集”和所需结果: Group_label Value x 12 x 12 x 2 x 1 y 5 y 5 y 5 y

我有两列数据

其中一个具有组的标签,另一个显示每个组中项目的值。我想计算每个组的平均值,只计算那些不同的值

在斯塔塔我怎么做


编辑:

请参见下面的“我的数据集”和所需结果:

Group_label   Value
   x            12
   x            12
   x            2
   x            1
   y            5
   y            5
   y            5
   y            2
   y            2
我希望生成以下平均值:

Group_label   Value      Average
   x            12         5
   x            12         5
   x            2          5
   x            1          5
   y            5          3.5
   y            5          3.5
   y            5          3.5
   y            2          3.5
   y            2          3.5
因此
x=(12+2+1)/3和
y=(5+2)/2的平均值

我尝试了
egen(mean)
命令,但它选择了每个组标签的所有值


我只想选择不同的值。

这是一个两步解决方案。首先需要在
egen
中使用
tag()
标记不同的值。然后在
egen
中使用
mean()

最微妙的一点是<代码>如果标记
将在结果中为未选择的观察保留缺失值。如何在计算中省略重复的值,同时将结果传播到观测值?请参阅的第9节,了解
cond()
mean()
的用法,这是一种实现此目的的方法,如代码所示,可能也是最透明的方法。另一种方法见同一篇文章的第10节,它让一些人感到有趣

有关对不同观察结果的相当详细的回顾,请参见


以下是我的作品:

clear

input str1 vlab   val
   "x"            12
   "x"            12
   "x"            2
   "x"            1
   "y"            5
   "y"            5
   "y"            5
   "y"            2
   "y"            2
end

bysort vlab: generate tag = val != val[_n-1]
bysort vlab: egen mean_val = mean(val) if tag == 1

list

     +-----------------------------+
     | vlab   val   tag   mean_val |
     |-----------------------------|
  1. |    x    12     1          5 |
  2. |    x    12     0          . |
  3. |    x     2     1          5 |
  4. |    x     1     1          5 |
  5. |    y     5     1        3.5 |
     |-----------------------------|
  6. |    y     5     0          . |
  7. |    y     5     0          . |
  8. |    y     2     1        3.5 |
  9. |    y     2     0          . |
     +-----------------------------+

编辑:

如果您也这样做:

bysort vlab: replace mean_val = mean_val[_n-1] if mean_val == .
您将获得:

list

     +-----------------------------+
     | vlab   val   tag   mean_val |
     |-----------------------------|
  1. |    x    12     1          5 |
  2. |    x    12     0          5 |
  3. |    x     2     1          5 |
  4. |    x     1     1          5 |
  5. |    y     5     1        3.5 |
     |-----------------------------|
  6. |    y     5     0        3.5 |
  7. |    y     5     0        3.5 |
  8. |    y     2     1        3.5 |
  9. |    y     2     0        3.5 |
     +-----------------------------+

谢谢但是有没有办法让“平均值”填充其组的所有行,而不仅仅是标记为“1”的行?是的,请参阅我的修订答案。
list

     +-----------------------------+
     | vlab   val   tag   mean_val |
     |-----------------------------|
  1. |    x    12     1          5 |
  2. |    x    12     0          5 |
  3. |    x     2     1          5 |
  4. |    x     1     1          5 |
  5. |    y     5     1        3.5 |
     |-----------------------------|
  6. |    y     5     0        3.5 |
  7. |    y     5     0        3.5 |
  8. |    y     2     1        3.5 |
  9. |    y     2     0        3.5 |
     +-----------------------------+