【发布时间】:2019-12-05 17:54:45
【问题描述】:
关于Stata中循环的一个小问题:
我有一个包含以下变量的数据集:隐含波动率(股票期权)和该期权的 delta(期权价格对标的物的弹性)。 Delta 严格来说在 20 到 80 之间,增量为 5。隐含波动率通常是几个百分点。
我想得到这个:
quietly arima impl_volatility if delta == 20, ar(1) ma(1)
predict tildevol20 if delta == 20
为delta (20, 25, 30, 35, ..., 80) 的每个值循环,因此循环中的下一个值是:
quietly arima impl_volatility if delta == 25, ar(1) ma(1)
predict tildevol25 if delta == 25
变量 tildevol(delta) 应该从 tildevol20 开始,并随着 delta 的增加而增加到 tildevol80。
我已经尝试过这个,以及其他几个迭代,但我似乎无法让它工作(deltalvl 是 delta 的本地存储值的名称,20-80)。
levelsof delta, local(deltalvl)
foreach 1 of local deltalvl {
quietly arima impl_volatility if delta == `deltalvl', ar(1) ma(1)
predict tildevol`deltalvl' if delta == `deltalvl'
}
它什么也不返回,它只是运行,然后结束,它没有给出错误。
Stata 文档似乎对此没有任何内容(或者我可能只是在寻找错误的地方)。
数据集示例:
因此,每个日期的每个 delta 都在 20-80 之间,增量为 5,每个 delta 都有隐含波动率。所以 1 个日期 > 13 个 deltas > 每个 delta 1 波动率。
【问题讨论】:
-
这里没有可重现的:没有我们可以使用的数据示例。什么地方出了错?你收到语法错误了吗?结果不是您所期望的?没结果?问题报告只是“我似乎无法让它工作”。请研究 Stata 标签 wiki 以获取详细建议。
-
这很奇怪,我没有错误。 .执行 "C:\Users\u1265418\AppData\Local\Temp\STD00000000.tmp" 。 foreach 1 of local deltalvl{ 2. 如果 delta == local deltalvl, ar(1) ma(1) 3. predict vol`' if delta == local deltalvl 4. } .文件结束它似乎没有运行。
-
我会添加一些数据示例
-
所述语法对我来说毫无意义。您永远不会在循环内引用本地宏
1。这不是致命的,但也不是你需要的。但由于deltalvl包含或应该包含值列表,arima调用应该因为非法而失败。 -
请使用
dataex命令提供示例数据,而不是屏幕截图。