我有两列数据。
一个显示一个组的标签,另一个显示每个组中项目的值。我想为每个组计算仅不同值的平均值。
如何在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) / 3
和y = (5 + 2) / 2
的平均值
我尝试了egen(mean)
命令,但是它为每个组标签选择了所有值。
我只想选择不同的值。
答案 0 :(得分:2)
这是一个两步解决方案。您首先需要在<canvas></canvas>
中使用tag()
标记不同的值。然后,您在egen
中使用mean()
。
最微妙的一点是,诸如... egen
之类的结果将在未选择的观察结果中留下缺失值。您如何在计算中忽略重复的值,又如何将结果扩展到他们的观察结果中?有关将if tag
与cond()
一起使用的信息,请参见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 |
+-----------------------------+