Stata groupby平均值和首次观察给出的数字错误

Stata groupby平均值和首次观察给出的数字错误,stata,Stata,我有一个城市年度面板数据,如下所示: 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 2

我有一个城市年度面板数据,如下所示:

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]
例如,它适用于市长D:Year1Growth=20.7,这是他2008年第一年的增长率。滚动平均值也有效,18.6=(20.7+16.5)/2和16.56=(20.7+16.5+12.5)/3

然而,A市长的数字是完全错误的


有人知道如何解决这个问题吗?

我无法重现。我注意到您的示例是不一致的,因为您的数据示例和结果的变量名不相同。(在对原始问题的编辑中更正:我的数据示例和结果在名称上是一致的,但不同。)

我唯一的猜测是

  • 对于真实数据集中的哪个变量中包含什么,存在一些混淆

  • 尽管您向我们展示了什么看起来像数字变量,但这些变量中的部分或全部可能是由包含数字的原始字符串变量的
    编码产生的。这是一种产生完全垃圾的已知方法。建议始终使用
    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 |
         +--------------------------------------------------------+
    
    *示例由-dataex-生成。有关详细信息,请键入help dataex
    清楚的
    投入str6城市年内str1市长双倍增长
    “橙色”2001“A”9.599998
    “橙色”2002“A”14.9
    “橙色”2003“A”14.6
    “橙色”2004“A”13
    “橙色”2005“B”9
    “橙色”2006“B”12.7
    “橙色”2007“C”18.4
    “橙色”2008“D”20.7
    “橙色”2009“D”16.5
    结束
    bysort City Mayor(年份):gen rollavg=总和(增长)/总和(增长<)
    bysort City Mayor(年份):gen Year 1增长=增长[1]
    名单,塞比(市长)
    +--------------------------------------------------------+
    |城市年市长增长滚动年1g~h|
    |--------------------------------------------------------|
    1. | 橙色2001 A 9.599998 9.599998 9.599998|
    2. | 橙色2002 A 14.912.259.599998|
    3. | 橙色2003 A 14.613.03333 9.599998|
    4. | 橙色2004 A 13 13.025 9.599998|
    |--------------------------------------------------------|
    5. | 橙色2005B9|
    6. | 橙色2006 B 12.7 10.85 9|
    |--------------------------------------------------------|
    7. | 橙色2007 C 18.4 18.4 18.4|
    |--------------------------------------------------------|
    8. | 橙色2008 D 20.720.720.7|
    9. | 橙色2009 D 16.518.620.7|
    +--------------------------------------------------------+
    
    有关提供数据示例的建议,请参见
    stata
    tagwiki。特别是,我们需要知道,对于这些变量中的任何一个,我们是否看到了值标签。在真实的数据集中,市长是用ID而不是名字编码的,因为有些人有相同的名字。因此,我们为每个人分配了一个唯一的ID,即数字(int)。要使用groupby,如果这是一个问题,我是否应该将ID转换为字符串?标识符是否为字符串在这里可能无关紧要。您报告的错误是数值结果错误。否则,这里唯一的共享货币就是我们可以运行的数据示例。非常感谢您的建议!错误已修复。。。原来是原始数据中的错误。。。
    * 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 |
         +--------------------------------------------------------+