我有以下格式的面板数据: | 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时我缺少什么?有没有一个很好的教程来了解正确的用法?
答案 0 :(得分:3)
尼克的答案应该能满足你的需求,
回答你的后续问题
为什么星期在“bysort city_id(week)”的括号中?
bysort
引用手册......
它验证数据是否按varlist1 varlist2排序,然后执行a,就好像只指定了varlist1一样
答案 1 :(得分:2)
egen
的帮助非常明确:
“与_N
一起使用的明确下标(使用_n
和generate
)不应与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
您需要为多个交易复杂化。你没有弄清楚它们是如何结合起来的。