【问题标题】:Stata: Number of overlapping days within multiple date rangesStata:多个日期范围内的重叠天数
【发布时间】:2021-04-21 22:27:02
【问题描述】:

我想计算多个日期范围内的重叠天数。例如,在下面的示例数据中,有 167 个重叠天:第一个从 1 月 7 日到 4 月 4 日,第二个从 5 月 30 日到 8 月 15 日。

start          end        
01jan2000    04apr2000 
30may2000    15aug2000
07jan2000    31dec2000

【问题讨论】:

    标签: loops date stata overlap


    【解决方案1】:

    这是相当粗略的,但可以完成工作。本质上,你

    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
    

    【讨论】:

    • distinct 来自 Stata Journalsearch distinct, sj 查看 2008 年论文的链接和最新更新(我写的是 2020 年)。否则,stata-journal.com/article.html?article=dm0068 专注于此类数据。
    • 谢谢!!!我花了一整天的时间试图找到一个解决方案,而且效果很好!
    • 我认为解决此类问题的一个好策略是将它们映射到熟悉的事物,例如计算不同的值,然后从那里向后工作以将数据转换为允许轻松完成计算的格式.
    猜你喜欢
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 2013-10-03
    • 2016-09-08
    相关资源
    最近更新 更多