如何正确使用egen均值函数来计算时间序列的平均差异?

时间:2013-11-20 00:02:52

标签: stata data-manipulation

我有以下格式的面板数据:     | transaction_id | city_id |一周| tr_cw | ,其中tr_cw是每周为每个城市计算的一些指标。

我试图使用egen计算每个城市的指标平均增长率:

egen tag_cw = tag(city_id week)
sort tag_cw city_id week
by tag_cw city_id: egen tr_speed = mean(tr_cw[_n]-(tr_cw[_n-1])) if tag_cw

然而,结果不同于更复杂的计算(在数值上看起来更有效):

by tag_cw city_id: g _tr_n = tr_cw[_n] if tag_cw
by tag_cw city_id: g _tr_n1 = tr_cw[_n-1] if tag_cw
by tag_cw city_id: egen tr_speed2 = mean(_tr_n-_tr_n1)

使用egen时我缺少什么?有没有一个很好的教程来了解正确的用法?

2 个答案:

答案 0 :(得分:3)

尼克的答案应该能满足你的需求,

回答你的后续问题

  

为什么星期在“bysort city_id(week)”的括号中?

bysort

手册中有解释

引用手册......

  

它验证数据是否按varlist1 varlist2排序,然后执行a,就好像只指定了varlist1一样

答案 1 :(得分:2)

egen的帮助非常明确:

“与_N一起使用的明确下标(使用_ngenerate)不应与egen一起使用”

原因是egen经常暂时更改排序顺序以执行其操作,因此下标不一定意味着您的想法。

因此,您需要先创建自己的增长变量,然后使用egen

将您的问题简化为每个城市和每周的一次交易,并假设每个小组内没有时间间隔且没有错过,这应该足够了:

bysort city_id (week) : gen tr_diff = tr_cw - tr_cw[_n-1] 
by city_id: egen tr_speed = mean(tr_diff) 
egen tag = tag(city_id) 
l city tr_speed if tag 

您需要为多个交易复杂化。你没有弄清楚它们是如何结合起来的。