Stata:日期之间的差距

Stata: Gaps between dates

我有一种情况需要订购几个日期,看看是否有覆盖范围的差距。我的数据集如下所示,其中 id 是面板 ID,startend 是日期。

id start     end
a  01.01.15 02.01.15
a  02.01.15 03.01.15
b  05.01.15 06.01.15
b  07.01.15 08.01.15
b  06.01.15 07.01.15

我需要确定覆盖范围存在差距的所有情况,这意味着 id 的第二个 start 日期大于相同的 first 结束日期ID。还应该注意的是,相同的 id 可能有不确定数量的观察结果,并且它们可能没有特定的顺序。我为每个 id 只有两个观察值的情况编写了下面的代码。

bys id: gen y=1 if end < start[_n+1]

但是,此代码不会产生预期的结果。我在想应该有另一种方法来解决这个问题。

假设您的日期变量确实是适当格式化的 Stata 每日日期变量,您的方法本质上似乎是合理的。您根本没有解释 "does not produce the desired results" 对您意味着什么。

下面的代码创建了一个类似于您的示例的沙箱,但将字符串变量转换为每日日期。

关键细节包括:

观察结果必须在面板内按日期排序。

每个面板中最后一个之后的观察结束日期将始终作为缺失返回,因此大于任何已知日期。这里的代码 returns 对应的指标为缺失。

clear 
input str1 id str8 (s_start s_end) 
a  "01.01.15" "02.01.15"
a  "02.01.15" "03.01.15"
b  "05.01.15" "06.01.15"
b  "07.01.15" "08.01.15"
b  "06.01.15" "07.01.15"
b  "10.01.15" "12.01.15" 
end 

foreach v in start end { 
    gen `v' = daily(s_`v', "DMY", 2050) 
    format `v' %td 
}

// the important line here 
bysort id (start) : gen first = end < start[_n+1] if _n < _N 

list , sepby(id) 

     +----------------------------------------------------------+
     | id    s_start      s_end       start         end   first |
     |----------------------------------------------------------|
  1. |  a   01.01.15   02.01.15   01jan2015   02jan2015       0 |
  2. |  a   02.01.15   03.01.15   02jan2015   03jan2015       . |
     |----------------------------------------------------------|
  3. |  b   05.01.15   06.01.15   05jan2015   06jan2015       0 |
  4. |  b   06.01.15   07.01.15   06jan2015   07jan2015       0 |
  5. |  b   07.01.15   08.01.15   07jan2015   08jan2015       1 |
  6. |  b   10.01.15   12.01.15   10jan2015   12jan2015       . |
     +----------------------------------------------------------+