我想计算多个日期范围内的重叠天数。例如,在下面的样本数据中,有167天重叠:第一天是从1月7日到4月4日,第二天是从5月30日到8月15日。
start end
01jan2000 04apr2000
30may2000 15aug2000
07jan2000 31dec2000
这相当粗糙,但能完成任务。本质上,你的
- 将数据重新整形为长格式,这在Stata中处理面板数据时通常是个好主意
- 填补每个咒语开始和结束之间的空白
- 保留多次出现的日期
- 计算日期的不同值
清除
/* Fake Data */
input str9(start end)
"01jan2000" "04apr2000"
"30may2000" "15aug2000"
"07jan2000" "31dec2000"
end
foreach var of varlist start end {
gen d = date(`var', "DMY")
drop `var'
gen `var' = d
format %td `var'
drop d
}
/* Count Overlapping Days */
rename (start end) date=
gen spell = _n
reshape long date, i(spell) j(range) string
drop range
xtset spell date, delta(1 day)
tsfill
bys date: keep if _N>1
distinct date