1 Star 0 Fork 11

dingxiuhao/Stata-Event_Study

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
rolling_sigma.ado 2.68 KB
一键复制 编辑 原始数据 按行查看 历史
Richard Herron 提交于 2017-07-05 10:52 . Minor changes
*! Date : 2016-07-22
*! version : 0.1
*! Author : Richard Herron
*! Email : richard.c.herron@gmail.com
*! fast rolling standard deviations
/*
2016-07-22 v0.1 fork of my rolling_beta Github repository
*/
program rolling_sigma
version 11.2
syntax varname(numeric) [ , short(integer 36) long(integer 36) faster ]
// dependent and indpendent vars from varlist
tempvar x
tokenize `varlist'
generate `x' = `1'
// faster version uses constant window and lag operators
if ("`faster'" == "") {
local l = `long'
local s = `short'
// check logical windows
if (`s' > `l') display as error "long must be >= short"
// tsfill to use simple subscripting, flag will me missing for fill observations
tempvar flag
generate `flag' = 1
tsfill
}
else {
display "faster option: long window = short window = `long'"
local w = `long'
}
// first round of temporary variables (more below)
tempvar xs x2s
// cumulative sums
generate `xs' = sum(`x')
generate `x2s' = sum(`x' * `x')
if ("`faster'" == "") {
// SLOW -- allows growing window
// index lags
/*
ida is absolute id (row number)
idf is first absolute id for each panel
idr is relative id (or ida - idf)
idl is absolute id of correct lag
*/
tempvar ida idf idr idl
generate `ida' = _n
xtset
bysort `r(panelvar)' (`r(timevar)') : generate `idf' = `ida'[1]
generate `idr' = `ida' - `idf' + 1
generate `idl' = cond(`idr' > `l', `ida' - `l', `idf') if (`idr' > `s')
generate len = `ida' - `idl'
// observations used
tempvar ms
generate `ms' = sum(missing(`x'))
generate obs = len - (`ms' - `ms'[`idl'])
// sigma
generate sigma = sqrt((`x2s' - `x2s'[`idl'])/(obs - 1) - ((`xs' - `xs'[`idl'])/obs)*((`xs' - `xs'[`idl'])/obs)*obs/(obs - 1))
// labels
label variable sigma "Rolling sigma"
label variable obs "Observations used"
label variable len "Window length"
// return to original state
drop if missing(`flag')
}
else {
// FAST -- requires constant window
// observations used
tempvar ms
generate `ms' = sum(missing(`x'))
generate obs = `w' - s`w'.`ms'
generate len = `w'
// sigma
generate sigma = sqrt(s`w'.`x2s'/(obs - 1) - (s`w'.`xs'/obs)*(s`w'.`xs'/obs)*obs/(obs - 1))
// labels
label variable sigma "Rolling sigma"
label variable obs "Observations used"
label variable len "Window length"
}
end
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/dingxiuhao/Stata-Event_Study.git
git@gitee.com:dingxiuhao/Stata-Event_Study.git
dingxiuhao
Stata-Event_Study
Stata-Event_Study
master

搜索帮助