Merge 合并不同数据集中对应于时间跨度的时间序列平均值
我有两个数据集,一个有合同,一个有市场价格。我试图完成的要点是找到一个时间序列的平均值,该时间序列对应于横截面数据集中的一段时间。请看下面 示例数据集1:Merge 合并不同数据集中对应于时间跨度的时间序列平均值,merge,time-series,stata,Merge,Time Series,Stata,我有两个数据集,一个有合同,一个有市场价格。我试图完成的要点是找到一个时间序列的平均值,该时间序列对应于横截面数据集中的一段时间。请看下面 示例数据集1: Beginning Ending Price 1/1/2014 5/15/2014 $19.50 3/2/2012 10/9/2015 $20.31 ... 1/1/2012 1/8/2012 $19.00 在上面的例子中,有几份合同,第一份从2014年1月到2014年5月,第二份从2012年3月到2015年10月。每个都有一个单
Beginning Ending Price
1/1/2014 5/15/2014 $19.50
3/2/2012 10/9/2015 $20.31
...
1/1/2012 1/8/2012 $19.00
在上面的例子中,有几份合同,第一份从2014年1月到2014年5月,第二份从2012年3月到2015年10月。每个都有一个单一的价格。第二个数据集有每周的市场价格
示例数据集2:
Date Price
1/1/2012 $18
1/8/2012 $17.50
....
1/15/2015 $21.00
我想在数据集1上找到每个合同开始和结束期间的平均“市场价格”(即数据集2中价格的平均值)。因此,对于2012年1月1日至2012年8月1日的第三份合同,第二个数据集的输出为(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
第二个数据集是面板还是单个时间序列?第二个数据集是单个时间序列,包含日期和市场价格。