如何获取数据集的非连续进入和退出日期



我有一个2008年至2018年劳动力中个人的不平衡面板数据集。因此,如果个人工作一年,他们就会获得收入。它看起来像这样:

* Example generated by -dataex-. For more info, type help dataex
clear
input float(idno year income)
1 2008 100
1 2009 100
1 2010 100
1 2011 100
1 2012 100
1 2013 100
1 2014 100
1 2015 100
1 2016 100
1 2017 100
1 2018 100
2 2008 100
2 2009 100
2 2010 100
3 2009 100
3 2010 100
3 2015 100
3 2016 100
end

从这个样本中,我们知道个体1(idno==1(在2008年至2018年期间有收入;类似地,个体2(idno==2(在2008-2010年期间工作。

我想确定个人进入劳动力市场和离开劳动力市场的年份。因此,我尝试了以下方法:

我将数据集矩形化(我使用Stata 16(:

fillin idno year

然后我确定个人是否在数据集中工作过:

gen work = . 
replace work = 1 if income != .

然后我试着按个人确定开始和结束日期(这只适用于连续的工作周期(

bysort idno: gen years_earn_income = year if work == 1 
bysort idno: gen years_no_income = year if work == 0
bysort idno: gen start = min(years_earn_income)
bysort idno: gen end = max(years_earn_income)

我正在努力为有多个就业期的个人争取一个合适的入职和离职年份。例如,个人3(idno==3(在2009-2010年和2015-2016年工作。因此,我希望变量反映多个就业期,就像个人3的情况一样。如果你能想一想如何看待这件事,我将不胜感激。

请参阅https://www.stata-journal.com/article.html?article=dm0029用于讨论处理咒语和来自SSC的CCD_ 5用于实现。你的例子可以这样分析:

clear 
input idno year income 
1 2008 100
1 2009 100
1 2010 100
1 2011 100
1 2012 100
1 2013 100
1 2014 100
1 2015 100
1 2016 100
1 2017 100
1 2018 100
2 2008 100
2 2009 100
2 2010 100
3 2009 100
3 2010 100
3 2015 100
3 2016 100
end 

tsset idno year 
tsfill 

ssc install tsspell 

tsspell, pcond(income)

list, sepby(idno _spell)

list if _seq == 1 | _end, sepby(idno _spell)

结果如下:

.  list, sepby(idno _spell)
+---------------------------------------------+
| idno   year   income   _seq   _spell   _end |
|---------------------------------------------|
1. |    1   2008      100      1        1      0 |
2. |    1   2009      100      2        1      0 |
3. |    1   2010      100      3        1      0 |
4. |    1   2011      100      4        1      0 |
5. |    1   2012      100      5        1      0 |
6. |    1   2013      100      6        1      0 |
7. |    1   2014      100      7        1      0 |
8. |    1   2015      100      8        1      0 |
9. |    1   2016      100      9        1      0 |
10. |    1   2017      100     10        1      0 |
11. |    1   2018      100     11        1      1 |
|---------------------------------------------|
12. |    2   2008      100      1        1      0 |
13. |    2   2009      100      2        1      0 |
14. |    2   2010      100      3        1      1 |
|---------------------------------------------|
15. |    3   2009      100      1        1      0 |
16. |    3   2010      100      2        1      1 |
|---------------------------------------------|
17. |    3   2011        .      0        0      0 |
18. |    3   2012        .      0        0      0 |
19. |    3   2013        .      0        0      0 |
20. |    3   2014        .      0        0      0 |
|---------------------------------------------|
21. |    3   2015      100      1        2      0 |
22. |    3   2016      100      2        2      1 |
+---------------------------------------------+

.  list if _seq == 1 | _end, sepby(idno _spell)
+---------------------------------------------+
| idno   year   income   _seq   _spell   _end |
|---------------------------------------------|
1. |    1   2008      100      1        1      0 |
11. |    1   2018      100     11        1      1 |
|---------------------------------------------|
12. |    2   2008      100      1        1      0 |
14. |    2   2010      100      3        1      1 |
|---------------------------------------------|
15. |    3   2009      100      1        1      0 |
16. |    3   2010      100      2        1      1 |
|---------------------------------------------|
21. |    3   2015      100      1        2      0 |
22. |    3   2016      100      2        2      1 |
+---------------------------------------------+

最新更新