Stata:日期之间的差距
Stata: Gaps between dates
我有一种情况需要订购几个日期,看看是否有覆盖范围的差距。我的数据集如下所示,其中 id
是面板 ID,start
和 end
是日期。
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 . |
+----------------------------------------------------------+
我有一种情况需要订购几个日期,看看是否有覆盖范围的差距。我的数据集如下所示,其中 id
是面板 ID,start
和 end
是日期。
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 . |
+----------------------------------------------------------+