如何确定(复杂的)面板图案? [英] How to determine (complex) panel pattern?
问题描述
我的问题与现有关于this one等状态论的讨论密切相关。我想提出一个新的问题,因为我想看看更复杂的面板图案,而不是连续咒语的数量。
假设给定一组公司,我想查看该公司在购买一些land > 0
房地产之前有多少年没有房地产land == 0
。
或者,更复杂的是,公司的房地产低于某一水平的年限land < 0.05 * land[s]
,其中s
是指公司购买房地产的年份。
我的第一个想法是使用egen
命令。但与其他常见情况不同的是,每家公司购买房产的具体时间是不同的,甚至不存在。
我的第二个想法是使用包xtpatternvar
,稍作修改。然而,由于对Stata编程的了解有限,我不太了解它的源代码。
ssc
让我们关注您的实际问题,它不是理解xtpatternvar
(您应该解释的那样),而是在面板数据中确定一个变量在满足每个面板中的某个条件多长时间后才满足互补条件。这并不容易,但在这里提出问题时,除了具体的例子之外,概括起来很重要。其他人可能并不关心土地购买数据,但他们可能存在同样的一般问题。
将他们可以使用的数据直接提供给回答问题的人也是一个好主意。关于统计主义,人们被要求使用dataex
(SSC),这里没有理由降低标准。这与https://stackoverflow.com/help/mcve
每个面板中的第一次(这里是年份)是每个面板中时间变量的最小值。(在某些数据集中,您可能不需要计算;您知道它总是一个特定的时间。)第一次满足某个条件也是最小的,但现在必须有条件。你想要的时间推移就是它们之间的区别。请注意,在xtset
或tsset
数据的代码中没有假设;没有假设等间距的值或平衡的面板;也没有假设在每个面板的开头有互补的值的拼写。请注意,该解决方案与您的"复杂"问题的解决方案相同。
clear
input float(firm response year)
1 0 2001
1 0 2002
1 12 2003
1 345 2004
1 6789 2005
2 12 2001
2 345 2002
2 6789 2003
2 12 2004
2 34 2005
end
egen first = min(year), by(firm)
egen first_pos = min(cond(response > 0, year, .)), by(firm)
gen time_to_first_pos = first_pos - first
list
+-------------------------------------------------------------+
| firm time response year first_~s first time_t~s |
|-------------------------------------------------------------|
1. | 1 1 0 2001 2003 2001 2 |
2. | 1 2 0 2002 2003 2001 2 |
3. | 1 3 12 2003 2003 2001 2 |
4. | 1 4 345 2004 2003 2001 2 |
5. | 1 5 6789 2005 2003 2001 2 |
|-------------------------------------------------------------|
6. | 2 1 12 2001 2001 2001 0 |
7. | 2 2 345 2002 2001 2001 0 |
8. | 2 3 6789 2003 2001 2001 0 |
9. | 2 4 12 2004 2001 2001 0 |
10. | 2 5 34 2005 2001 2001 0 |
+-------------------------------------------------------------+
这篇关于如何确定(复杂的)面板图案?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!