我的问题与现有的Statalist讨论密切相关,例如this one。我想提出一个新问题,因为我希望看到更复杂的面板模式,而不是连续的法术数量。
说,给定一个公司小组,我想检查公司在购买一些land == 0
之前没有房地产财产land > 0
多少年。
或者,更为复杂的是,该公司的财产低于某个级别land < 0.05 * land[s]
多少年,其中s
指的是公司购买房地产的年份。
我的第一个想法是使用egen
命令。但与其他通常情况不同,每个公司的特定购买时间不同,甚至不存在。
我的第二个想法是使用包xtpatternvar
,稍加修改。但是,由于Stata编程知识有限,我不太了解它的源代码。
答案 0 :(得分:3)
让我们专注于您的真实问题,这不是理解xtpatternvar
(SSC,正如您应该解释的那样),而是在面板数据中确定变量满足某些条件的时间长短小组在满足补充条件之前。这并不容易,但除了在这里提出问题的特定例子之外,概括一下非常重要。其他人可能不关心土地购买数据,但他们可能有同样的一般问题。
这只是http://www.stata.com/support/faqs/data-management/dropping-spells-of-missing-values/中讨论的问题的几个小问题。该FAQ讨论了各种技术。我会选一个。整个FAQ可能值得研究。 (进一步说道德:查看StataCorp网站上的常见问题解答。)
将数据直接提供给回答的人也是一个好主意。在Statalist上,人们被要求使用dataex
(SSC),这里没有理由降低标准。这与https://stackoverflow.com/help/mcve
每个面板中的第一次(今年)是每个面板中时间变量的最小值。 (在某些数据集中,您可能不需要计算它;您知道它总是特定的时间。)第一次满足某些条件也是最小值,但现在必须是有条件的。你想要的时间流逝只是他们之间的差异。请注意,xtset
或tsset
数据的代码中没有假设;没有假设等间距值或平衡面板;并且不假设在每个小组的开头都有一个补充值的拼写。请注意,解决方案与您的复杂&#34;相同类型。问题
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 |
+-------------------------------------------------------------+