【问题标题】:Stata: calculating growth rates for observations with same IDStata:计算具有相同 ID 的观测值的增长率
【发布时间】:2015-11-18 20:56:40
【问题描述】:

我想在 Stata 中计算具有相同 ID 的观测值的增长率。我的数据简化后如下所示:

ID    year   a   b   c   d   e   f
10    2010   2   4   9   8   4   2
10    2011   3   5   4   6   5   4
220   2010   1   6   11  14  2   5
220   2011   6   2   12  10  5   4    
334   2010   4   5   4   6   1   4
334   2011   5   5   4   4   3   2

现在我想根据变量 a-f 从 2010 年到 2011 年计算每个 ID 的增长率:

例如 ID 10 和变量 a 它将是:(3-2)/2,对于变量 b:(5- 4)/4 等并将结果存储在新变量中(例如 growth_agrowth_b 等)。

由于我有超过 12 万个观察值和大约 300 个变量,有没有一种有效的方法(循环)?

我的代码如下所示(简化):

local variables "a b c d e f"
foreach x in local variables { 
bys ID: g `x'_gr = (`x'[_n]-`x'[_n-1])/`x'[_n-1]
}

仅供参考:变量 a-f 是数字。

但 Stata 说:“找不到本地”,我不确定代码是否正确。我是否也必须先对年份进行排序?

【问题讨论】:

    标签: stata


    【解决方案1】:

    中的具体错误

    local variables "a b c d e f"
    foreach x in local variables { 
        bys ID: g `x'_gr = (`x'[_n]-`x'[_n-1])/`x'[_n-1]
    }
    

    foreach 的语法错误,这里需要像 foreach x of local variables 这样的语法,因为您之前使用了本地宏。使用关键字inforeach 从字面上理解单词local,并在此处查找具有该名称的变量:因此出现错误消息。这是基本的foreach 语法:请参阅它的帮助。

    由于其他原因,此代码存在问题。

    1. ID 上排序不能保证正确的排序顺序,这里是year 的时间顺序,对于每个不同的ID。如果观察结果在ID 内混杂,结果将是垃圾。

    2. 代码假定所有时间值都存在;否则观察之间的时间间隔可能不相等。

    获得增长率的更简洁的方法是

    tsset ID year 
    foreach x in a b c d e f { 
        gen `x'_gr = D.`x'/L.`x' 
    } 
    

    一旦您拥有tsset(或xtset),就可以毫无顾忌地使用时间序列运算符:正确排序是自动进行的,并且运算符对数据中的间隙很聪明(例如,年度数据从 1982 年跳到 1984 年) .

    对于更多变量,循环可以是

    foreach x of var <whatever> { 
        gen `x'_gr = D.`x'/L.`x' 
    } 
    

    &lt;whatever&gt; 可能是一个通用(数字)变量列表。

    编辑:自首次发布以来,问题发生了变化,并且仅在计算 2010 年至 2011 年的增长率时声明了利息,示例中的含义是仅存在那些年份。上面更通用的代码自然仍可用于计算这些增长率。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-08
      • 2021-07-25
      相关资源
      最近更新 更多