【问题标题】:Generate variable containing mean of observations in other groups生成包含其他组中观察平均值的变量
【发布时间】:2018-03-09 20:03:48
【问题描述】:

我有以下数据

  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

我想通过date(strike == (strike+50)) 生成一个包含price 平均值的变量

例如对于第一行 (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 的下一个增量,而不是strike==strike+50 的平均值。


对于那些想知道或感兴趣的人,我需要这个来计算 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 附录。 17.

【问题讨论】:

标签: stata


【解决方案1】:

在 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 变量。

【讨论】:

    猜你喜欢
    • 2017-10-13
    • 2016-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多