Stata中的第一次和最后一次出现

时间:2017-05-18 12:00:42

标签: stata sales

我有一个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)。

1 个答案:

答案 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()语法中构建特殊规则。