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

时间:2018-09-20 20:50:40

标签: stata

我有两列数据。

一个显示一个组的标签,另一个显示每个组中项目的值。我想为每个组计算仅不同值的平均值。

如何在Stata中做到这一点?


编辑:

在下面查看我的数据集和所需结果:

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) / 3y = (5 + 2) / 2的平均值

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

我只想选择不同的值。

2 个答案:

答案 0 :(得分:2)

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

最微妙的一点是,诸如... egen之类的结果将在未选择的观察结果中留下缺失值。您如何在计算中忽略重复的值,又如何将结果扩展到他们的观察结果中?有关将if tagcond()一起使用的信息,请参见this paper的第9节,这是一种实现方法,在代码中得到了举例说明,也许也是最透明的方法。另一种方法请参见同一篇文章的第10节,该方法使某些人感到很开心。

要详细了解不同的观察结果,请参见https://www.stata-journal.com/sjpdf.html?articlenum=dm0042

mean()

答案 1 :(得分:1)

以下对我有用:

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