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