不同数据集中时间跨度对应的时间序列的合并平均值
Merging average of time series corresponding to time span in a different data set
我有两个数据集,一个有合同,一个有市场价格。我想要完成的要点是找到与 cross-sectional 数据集中的一段时间相对应的时间序列的平均值。请看下面。
示例数据集 1:
Beginning Ending Price
1/1/2014 5/15/2014 .50
3/2/2012 10/9/2015 .31
...
1/1/2012 1/8/2012 .00
在上面的示例中有多个合约,第一个从 2014 年 1 月到 2014 年 5 月,第二个从 2012 年 3 月到 2015 年 10 月。每个都有一个价格。第二个数据集有每周市场价格。
示例数据集 2:
Date Price
1/1/2012
1/8/2012 .50
....
1/15/2015 .00
我想找到数据集 1 上每个合约的开始和结束期间之间的平均值 "market price"(即数据集 2 中价格的平均值)。因此,对于来自 1/ 的第三个合约1/2012 到 1/8/2012,从第二个数据集输出将是 (18+17.50)/2 = 17.75。然后将这个值合并回原始数据集。
我使用 Stata,但也可以使用 R 或 Excel。
此外,如果您对标题有更好的建议,我将不胜感激!
您可以将合约横截面数据与时间序列交叉,形成每对组合,从日期范围外降低价格,并计算均值,如下所示:
/* Fake Data */
tempfile ts ccs
clear
input str9 d p_daily
"1/1/2012" 18
"1/8/2012" 17.50
"1/15/2015" 21.00
end
gen date = date(d,"MDY")
format date %td
drop d
rename date d
save `ts'
clear
input id str8 bd str9 ed p_contract
1 "1/1/2014" "5/15/2014" 19.50
2 "3/2/2012" "10/9/2015" 20.31
3 "1/1/2012" "1/8/2012" 19.00
end
foreach var of varlist bd ed {
gen date = date(`var',"MDY")
format date %td
drop `var'
rename date `var'
}
save `ccs'
/* Calculate Mean Prices and Merge Contracts Back In */
cross using `ts'
sort id d
keep if d >= bd & d <=ed
collapse (mean) mean_p = p_daily, by(id bd ed p_contract)
merge 1:1 id using `ccs', nogen
sort id
这会让你得到这样的结果:
id p_contract bd ed mean_p
1 19.5 01jan2014 15may2014 .
2 20.31 02mar2012 09oct2015 21
3 19 01jan2012 08jan2012 17.75
我有两个数据集,一个有合同,一个有市场价格。我想要完成的要点是找到与 cross-sectional 数据集中的一段时间相对应的时间序列的平均值。请看下面。
示例数据集 1:
Beginning Ending Price
1/1/2014 5/15/2014 .50
3/2/2012 10/9/2015 .31
...
1/1/2012 1/8/2012 .00
在上面的示例中有多个合约,第一个从 2014 年 1 月到 2014 年 5 月,第二个从 2012 年 3 月到 2015 年 10 月。每个都有一个价格。第二个数据集有每周市场价格。
示例数据集 2:
Date Price
1/1/2012
1/8/2012 .50
....
1/15/2015 .00
我想找到数据集 1 上每个合约的开始和结束期间之间的平均值 "market price"(即数据集 2 中价格的平均值)。因此,对于来自 1/ 的第三个合约1/2012 到 1/8/2012,从第二个数据集输出将是 (18+17.50)/2 = 17.75。然后将这个值合并回原始数据集。
我使用 Stata,但也可以使用 R 或 Excel。
此外,如果您对标题有更好的建议,我将不胜感激!
您可以将合约横截面数据与时间序列交叉,形成每对组合,从日期范围外降低价格,并计算均值,如下所示:
/* Fake Data */
tempfile ts ccs
clear
input str9 d p_daily
"1/1/2012" 18
"1/8/2012" 17.50
"1/15/2015" 21.00
end
gen date = date(d,"MDY")
format date %td
drop d
rename date d
save `ts'
clear
input id str8 bd str9 ed p_contract
1 "1/1/2014" "5/15/2014" 19.50
2 "3/2/2012" "10/9/2015" 20.31
3 "1/1/2012" "1/8/2012" 19.00
end
foreach var of varlist bd ed {
gen date = date(`var',"MDY")
format date %td
drop `var'
rename date `var'
}
save `ccs'
/* Calculate Mean Prices and Merge Contracts Back In */
cross using `ts'
sort id d
keep if d >= bd & d <=ed
collapse (mean) mean_p = p_daily, by(id bd ed p_contract)
merge 1:1 id using `ccs', nogen
sort id
这会让你得到这样的结果:
id p_contract bd ed mean_p
1 19.5 01jan2014 15may2014 .
2 20.31 02mar2012 09oct2015 21
3 19 01jan2012 08jan2012 17.75