我有一个2006年到2012年的面板数据集。我生成了一个新变量entry
,它对于输入到某个国家/地区的公司取值为1。例如,如果一家公司在时间(t)的销售价值缺失(。),则其价值为0
而在(t + 1),如果它进入一个国家,换言之,其价值为销售额为1
。我用于此的成功命令如下:
egen firm_id=group(firm country)
by firm_id (year), sort: gen byte entry = ///
sum(inrange(sales, 0,.)) == 1 & sum(inrange(sales[_n - 1],0,.)) == 0
由于我的数据从2006年开始,我用以下命令排除了今年的观察结果:
bysort firm (year) : replace entry = 0 if year == 2006
然而我想要的不是0值, 在其进入后的后续年份中具有缺失值(例如,在t + 2或t + 3)。
同样我申请退出但我更改了年份的排序顺序:
gen nyear = -year
by firm_id (nyear), sort: gen byte exit = ///
sum(inrange(sales, 0,.)) == 1 & sum(inrange(sales[_n - 1],0,.)) == 0
由于我的数据中的最后一个观察年是2012年,我排除了这些观察结果:
bysort firm (year) : replace exit = 0 if year == 2012
再次在这里我想要的不是0值, 在退出后的后续年份中具有缺失值(例如,在t + 2或t + 3)。
答案 0 :(得分:0)
据我所知,变量sales
在没有时会丢失,否则就是正数。
您希望一年中的指标成为某个国家/地区公司销售的第一年和最后一年。
我认为这可以帮到你。首先,我们需要示例数据!
* Example generated by -dataex-. To install: ssc install dataex
clear
input float(firm_id year sales)
1 2006 .
1 2007 .
1 2008 42
1 2009 42
1 2010 42
1 2011 .
1 2012 .
2 2006 .
2 2007 666
2 2008 666
2 2009 .
2 2010 .
2 2011 .
2 2012 .
end
第一个和最后一个日期是最短和最长日期,条件是有销售。
egen first = min(cond(sales < ., year, .)), by(firm_id)
egen last = max(cond(sales < ., year, .)), by(firm_id)
有关技术的讨论,请参阅section 9 of this paper。然后(1,。)指标直接跟随
gen isfirst = cond(year == first, 1, .)
gen islast = cond(year == last, 1, .)
list, sepby(firm_id)
+----------------------------------------------------------+
| firm_id year sales first last isfirst islast |
|----------------------------------------------------------|
1. | 1 2006 . 2008 2010 . . |
2. | 1 2007 . 2008 2010 . . |
3. | 1 2008 42 2008 2010 1 . |
4. | 1 2009 42 2008 2010 . . |
5. | 1 2010 42 2008 2010 . 1 |
6. | 1 2011 . 2008 2010 . . |
7. | 1 2012 . 2008 2010 . . |
|----------------------------------------------------------|
8. | 2 2006 . 2007 2008 . . |
9. | 2 2007 666 2007 2008 1 . |
10. | 2 2008 666 2007 2008 . 1 |
11. | 2 2009 . 2007 2008 . . |
12. | 2 2010 . 2007 2008 . . |
13. | 2 2011 . 2007 2008 . . |
14. | 2 2012 . 2007 2008 . . |
+----------------------------------------------------------+
我在2006或2012年做了不同的事情。您可以在cond()
语法中构建特殊规则。