stata - Stata groupby平均值和第一次观察给出错误的数字
问题描述
我有一个城市年级别的面板数据,如下所示:
city year mayor growth
Orange 2001 A 9.599998
Orange 2002 A 14.9
Orange 2003 A 14.6
Orange 2004 A 13
Orange 2005 B 9
Orange 2006 B 12.7
Orange 2007 C 18.4
Orange 2008 D 20.7
Orange 2009 D 16.5
我想为每个城市的每个市长计算:(1)他担任市长第一年的增长(2)他第一年以来的滚动平均增长
我的代码是:
bysort city mayor (year) : gen rollavg = sum(growth) / sum(growth < .) if mayor != "" & growth != .
bysort city mayor (year) : gen year1growth = growth[1]
它适用于大多数数据,但对于某些城市/市长,Stata 返回随机数:
city year mayor growth year1growth rollavg
Orange 2001 A 9.599998 10345.59 10345.59
Orange 2002 A 14.9 10345.59 5180.245
Orange 2003 A 14.6 10345.59 3458.363
Orange 2004 A 13 10345.59 .
Orange 2005 B 9 9 9
Orange 2006 B 12.7 9 10.85
Orange 2007 C 18.4 18.4 18.4
Orange 2008 D 20.7 20.7 20.7
Orange 2009 D 16.5 20.7 18.6
Orange 2010 D 12.5 20.7 16.56667
例如,它适用于市长 D:Year1Growth = 20.7,这是他 2008 年第一年的增长率。滚动平均值也适用,18.6 = (20.7+16.5)/2 和 16.56 = (20.7+16.5+12.5)/3。
然而,市长 A 的数字完全错误。
有谁知道如何解决这一问题?
解决方案
我无法重现这个。我注意到您的示例不一致,因为您的数据示例和结果的变量名称不相同。(在对原始问题的编辑中更正:我的数据示例和结果名称一致,但不同。)
我唯一的猜测是
对于真实数据集中的哪些变量存在一些混淆。
尽管您向我们展示了看起来像数字变量的内容,但这些变量中的一些或全部可能是由
encode
包含数字的原始字符串变量产生的。这是生产完全垃圾的已知方法。建议总是使用destring
,而不是encode
。
限定符与if
此示例无关。
* Example generated by -dataex-. For more info, type help dataex
clear
input str6 City int Year str1 Mayor double Growth
"Orange" 2001 "A" 9.599998
"Orange" 2002 "A" 14.9
"Orange" 2003 "A" 14.6
"Orange" 2004 "A" 13
"Orange" 2005 "B" 9
"Orange" 2006 "B" 12.7
"Orange" 2007 "C" 18.4
"Orange" 2008 "D" 20.7
"Orange" 2009 "D" 16.5
end
bysort City Mayor (Year) : gen rollavg = sum(Growth) / sum(Growth < .)
bysort City Mayor (Year) : gen year1growth = Growth[1]
list, sepby(Mayor)
+--------------------------------------------------------+
| City Year Mayor Growth rollavg year1g~h |
|--------------------------------------------------------|
1. | Orange 2001 A 9.599998 9.599998 9.599998 |
2. | Orange 2002 A 14.9 12.25 9.599998 |
3. | Orange 2003 A 14.6 13.03333 9.599998 |
4. | Orange 2004 A 13 13.025 9.599998 |
|--------------------------------------------------------|
5. | Orange 2005 B 9 9 9 |
6. | Orange 2006 B 12.7 10.85 9 |
|--------------------------------------------------------|
7. | Orange 2007 C 18.4 18.4 18.4 |
|--------------------------------------------------------|
8. | Orange 2008 D 20.7 20.7 20.7 |
9. | Orange 2009 D 16.5 18.6 20.7 |
+--------------------------------------------------------+
推荐阅读
- mysql - MySQL:“付款”表与多个可能的“服务”表相关联
- php - php按非数字值排序多维数组,然后按数字
- javascript - 如何使用 chart.js 在图表中设置固定或最小刻度限制?
- javascript - 递归函数和这个 D3.JS
- android-studio - Android Studio 中的 PNG 导入错误
- reporting-services - 如何在 SSRS 折线图的值 (Y) 轴上对标签进行排序?
- semantic-ui - href 上的语义 UI 模式
- fpga - 可以在FPGA上实现tflite模型吗
- python - Spacy NLP 与来自 Pandas DataFrame 的数据
- excel - 自动将 B 列上的链接添加到 Excel 中 A 列中的字符串