1
集團我試圖從一個三維面板數據創建工具,如下包括:查找滯後平均
input firm year market price comp_avg
1 2000 10 1 .
3 2000 10 2 .
3 2001 10 3 .
1 2002 10 4 .
3 2002 10 5 .
1 2000 20 6 .
3 2000 20 7 .
1 2001 20 8 .
2 2001 20 9 .
3 2001 20 10 .
1 2002 20 20 .
2 2002 20 30 .
3 2002 20 40 .
2 2000 30 50 .
1 2001 30 60 .
2 2001 30 70 .
1 2002 30 80 .
2 2002 30 90 .
end
我想創建該儀器是滯後的(年-1)平均價格一家公司的競爭對手(同一市場中的那些公司)在該公司每年在特定年份經營的市場。
目前,我有一些代碼可以完成這項工作,但我希望我錯過了一些東西,並且可以以更清晰或更有效的方式做到這一點。
下面是代碼:
// for each firm
qui levelsof firm, local(firms)
qui foreach f in `firms' {
// find all years for that firm
levelsof year if firm == `f', local(years)
foreach y in `years' {
// skip first year (because there is no lagged data)
if `y' == 2000 {
continue
}
// find all markets in that year
levelsof market if firm == `f' & year == `y', local(mkts)
local L1 = `y'-1
foreach m in `mkts' {
// get average of all compeitors in that market in the year prior
gen temp = firm != `f' & year == `L1' & market == `m'
su price if temp
replace comp_avg = r(mean) if firm == `f' & market == `m' & year == `y'
drop temp
}
}
}
我一起工作的數據是相當大的(〜百萬OBS),所以速度越快越好。
感謝您的回答!這是一個很大的加速和更清晰。不知道爲什麼我無法繞過創造滯後的價格變量我的頭 –
@EricHB另一個解決方案提供。一線解決方案歡迎。 –
看來你的第一個解決方案在我的機器上還是比較快,但是rangestat命令有非常明確的語法,這總是一個加號 –