首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Stata:计算相同ID观测值的增长率

Stata:计算相同ID观测值的增长率
EN

Stack Overflow用户
提问于 2015-08-25 08:31:45
回答 1查看 5.5K关注 0票数 1

我想用Stata计算具有相同ID的观测数据的增长率。我的数据以一种简化的方式显示如下:

代码语言:javascript
复制
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计算2010年到2011年的每个ID增长率:

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

由于我有超过120 K的观测值和大约300个变量,那么是否有一种有效的方法(循环)?

我的代码看起来如下(简化):

代码语言:javascript
复制
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]
}

变量are是数字变量。

但斯塔塔说:“本地找不到”,我不确定代码是否正确。我也必须先排序一年吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-25 09:31:52

中的特定错误

代码语言:javascript
复制
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. 代码假定所有的时间值都存在,否则观测之间的时间间隔可能是不相等的。

获得增长率的一种更清洁的方法是

代码语言:javascript
复制
tsset ID year 
foreach x in a b c d e f { 
    gen `x'_gr = D.`x'/L.`x' 
} 

一旦您有了tsset (或xtset),就可以毫无畏惧地使用时间序列运算符:正确的排序是自动的,运算符对数据中的空白很聪明(例如,从1982年到1984年的年度数据跳跃)。

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

代码语言:javascript
复制
foreach x of var <whatever> { 
    gen `x'_gr = D.`x'/L.`x' 
} 

其中<whatever>可以是一个通用(数字)变体列表。

编辑:问题已经改变了,因为第一次张贴和利息是在计算增长率仅从2010年至2011年,并暗示在例子中,只有这些年是存在的。上面更一般的代码自然仍然适用于计算这些增长率。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32199175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档