问题描述
我在对Stata上的数据集进行条件调整时遇到了问题。基本上,我希望在数据集中-在特定的组内-对另一个变量的过去值执行特定操作(如变量所指示的)的观察的存在。假设我有以下内容
obs | id | action1 | action2 | year 1 | 1 | 1 | 0 | 2000 2 | 1 | 0 | 1 | 2001 3 | 1 | 0 | 1 | 2002 4 | 1 | 0 | 1 | 2002 5 | 1 | 0 | 1 | 2003 6 | 2 | 1 | 0 | 2000 7 | 2 | 1 | 0 | 2001 8 | 2 | 0 | 1 | 2002 9 | 2 | 0 | 1 | 2002 10 | 2 | 0 | 1 | 2003
我知道我的建议可能不是最简单的方法,但我仍然无法实现它,不幸的是,我无法找到帮助我做到这一点的代码。希望你能帮我。谢谢
Francesco
推荐答案
以下假设某些事情。
clear
set more off
input ///
obs id action1 action2 year
1 1 1 0 2000
2 1 0 1 2001
3 1 0 1 2002
4 1 0 1 2003
5 2 1 0 2000
6 2 0 1 2001
7 2 1 0 2002
8 2 0 1 2003
end
list, sepby(id)
*-----
bysort id (year) : keep if action1 | (action1[_n-1] + action1[_n-2] > 0)
list, sepby(id)
括号之间的值分别为1或0,具体取决于不等式是真还是假。此片段指示是否在前两个观察中采取了操作1。
您需要决定如何处理前两个观察结果,因为它们不能与前面的两个观察结果(它们不存在)进行比较。在下面的示例中,它们将始终保留,因为与本例中不存在的观察进行比较意味着添加缺少的值,这会导致缺少。在Stata中,丢失被认为是一个非常大的数字。
您还可以使用时间序列运算符(help tsvarlist
,help xtset
),并且真正尊重时间变量。在这里,我将使用前两个观察结果。这可能与前两个时间点重合,也可能不重合。
我认为您的两个操作是相互排斥的,但您没有明确表示。
这篇关于根据变量的过去值对统计数据集进行条件调整的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!