Stata:多个日期范围内重叠的天数

问题描述 投票:0回答:2

我想计算多个日期范围内重叠的天数。例如,在下面的示例数据中,有 167 个重叠天:第一个从 07jan 到 04apr,第二个从 30may 到 15aug。

start          end        
01jan2000    04apr2000 
30may2000    15aug2000
07jan2000    31dec2000
loops date stata overlap
2个回答
2
投票

这相当粗糙,但完成了工作。本质上,你

  1. 将数据重塑为长格式,这在 Stata 中处理面板数据时通常是个好主意
  2. 填补每个咒语的开始和结束之间的空白
  3. 保留多次出现的日期
  4. 计算日期的不同值

清晰

/* 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

0
投票

此代码对我不起作用,因为我有重复的日期(并不总是像上面的“假数据”中那样不同的日期。有谁知道如何执行上述相同的步骤,但日期中可能包含重复的日期?

© www.soinside.com 2019 - 2024. All rights reserved.