【发布时间】:2021-04-21 22:27:02
【问题描述】:
我想计算多个日期范围内的重叠天数。例如,在下面的示例数据中,有 167 个重叠天:第一个从 1 月 7 日到 4 月 4 日,第二个从 5 月 30 日到 8 月 15 日。
start end
01jan2000 04apr2000
30may2000 15aug2000
07jan2000 31dec2000
【问题讨论】:
我想计算多个日期范围内的重叠天数。例如,在下面的示例数据中,有 167 个重叠天:第一个从 1 月 7 日到 4 月 4 日,第二个从 5 月 30 日到 8 月 15 日。
start end
01jan2000 04apr2000
30may2000 15aug2000
07jan2000 31dec2000
【问题讨论】:
这是相当粗略的,但可以完成工作。本质上,你
清除
/* 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
【讨论】:
distinct 来自 Stata Journal。 search distinct, sj 查看 2008 年论文的链接和最新更新(我写的是 2020 年)。否则,stata-journal.com/article.html?article=dm0068 专注于此类数据。