生成包含其他组中观察值均值的变量

时间:2018-03-09 20:03:48

标签: stata

我有以下数据

  date         price  strike
"01apr2010"    1086.2  50
"01apr2010" 1048.6001 100
"01apr2010"    1060.8 100
"01apr2010"    1014.1 100
"01apr2010"   1037.45 100
"01apr2010"     988.4 150
"01apr2010"    919.05 200
"01apr2010"     949.5 200
"01apr2010"     961.1 200
"01apr2010"     938.9 200
"01apr2010"       967 200
"01apr2010"     972.8 200
"01apr2010"    924.75 225
"01apr2010"     914.4 225
"01apr2010"     911.2 250

我想通过pricedate

生成一个包含(strike == (strike+50))均值的变量

e.g。对于第一行(strike=50),这将是date="01apr2010“和strike=100 (1048+1060+...+1037)/4的平均价格。 对于第2-5行(strike=100),这将是988.4(第6行中为price)。 对于第6行(strike=150),这将是(919.05+...+972.8)/6

日期和点击的平均值仅为egen mean(price), by(date strike),但我需要一个变量,其中包含strike等于(strike+50)的观察值的平均值。

这也可以,优选地,而不是strike==strike+50的平均值,strike + strike中的下一个增量。

对于那些想知道或感兴趣的人,我需要这个来计算SP500上看涨期权价格的经验概率密度函数, 可以近似为

for options with prices c1,c2,c3 
with strike prices K1=K2-d < K2 < K3=K2+d.
the risk-neutral probability density function of the underlying asset being equal to K2 is
g(S_t = K2) = (c1+c3-2*c2)/d^2

参见Hull(2018)“期权,期货及其他衍生产品”,附录A至chp。 17。

1 个答案:

答案 0 :(得分:0)

在Statalist上查看数百次rangestat(SSC)提及,例如,

clear 
input str9 date         price  strike
"01apr2010"    1086.2  50
"01apr2010" 1048.6001 100
"01apr2010"    1060.8 100
"01apr2010"    1014.1 100
"01apr2010"   1037.45 100
"01apr2010"     988.4 150
"01apr2010"    919.05 200
"01apr2010"     949.5 200
"01apr2010"     961.1 200
"01apr2010"     938.9 200
"01apr2010"       967 200
"01apr2010"     972.8 200
"01apr2010"    924.75 225
"01apr2010"     914.4 225
"01apr2010"     911.2 250
end 

rangestat mean1=price, interval(strike 50 50) by(date) 
bysort date (strike) : gen group = sum(strike != strike[_n-1])  
rangestat mean2=price, interval(group 1 1) by(date) 

list, sepby(strike) 

     +--------------------------------------------------------------+
     |      date     price   strike       mean1   group       mean2 |
     |--------------------------------------------------------------|
  1. | 01apr2010    1086.2       50   1040.2375       1   1040.2375 |
     |--------------------------------------------------------------|
  2. | 01apr2010    1048.6      100   988.40002       2   988.40002 |
  3. | 01apr2010    1060.8      100   988.40002       2   988.40002 |
  4. | 01apr2010    1014.1      100   988.40002       2   988.40002 |
  5. | 01apr2010   1037.45      100   988.40002       2   988.40002 |
     |--------------------------------------------------------------|
  6. | 01apr2010     988.4      150   951.39166       3   951.39166 |
     |--------------------------------------------------------------|
  7. | 01apr2010    919.05      200   911.20001       4   919.57501 |
  8. | 01apr2010     949.5      200   911.20001       4   919.57501 |
  9. | 01apr2010     961.1      200   911.20001       4   919.57501 |
 10. | 01apr2010     938.9      200   911.20001       4   919.57501 |
 11. | 01apr2010       967      200   911.20001       4   919.57501 |
 12. | 01apr2010     972.8      200   911.20001       4   919.57501 |
     |--------------------------------------------------------------|
 13. | 01apr2010    924.75      225           .       5   911.20001 |
 14. | 01apr2010     914.4      225           .       5   911.20001 |
     |--------------------------------------------------------------|
 15. | 01apr2010     911.2      250           .       6           . |
     +--------------------------------------------------------------+

此处可以看到琐碎的差异,因为默认情况下,您的数字示例会以float的形式读入,而rangestat会生成double个变量。