[英]Working with date ranges - creating a flag in panel
我有兩個數據集:
首先可以是這樣的(每個公司都有所有的年度觀察記錄):
id year
1 2010
1 ...
1 2020
2 2010
2 ...
2 2020
第二個可以是這樣的(所以各種各樣,一家公司可以有所有年的貸款,在開始和結束時都有一些差距):
id start end
1 2010 2011
1 2011 2014
1 2017 2018
1 2012 2020
2 2014 2018
3 2011 2012
3 2015 2018
3 2018 2020
4 2011 2012
4 2015 2018
4 2010 2018
想法是將兩者merge
,因此每家公司在一年中得到 0 或 1,如果當年有貸款(因此任何范圍匹配)則為 1,如果公司當年沒有貸款則為 0。
基於以上內容的示例公司如下所示:
id year flag
3 2010 0
3 2011 1
3 2012 1
3 2013 0
3 2014 0
3 2015 1
3 2016 1
3 2017 1
3 2018 1
3 2019 1
3 2020 1
希望這是有道理的。 我嘗試inrange()
但有太多不同的場景,我的代碼變得混亂,認為有一種簡單干凈的方法可以做到這一點。
如果您處理第二個數據集,則可以獲得merge
與主數據集合並的內容。
clear
input id start end
1 2010 2011
1 2011 2014
1 2017 2018
1 2012 2020
2 2014 2018
3 2011 2012
3 2015 2018
3 2018 2020
4 2011 2012
4 2015 2018
end
gen long ID = _n
gen toexpand = end - start + 1
expand toexpand
bysort ID : gen year = start + _n - 1
drop start end ID toexpand
duplicates drop id year, force
sort id year
list, sepby(id)
+-----------+
| id year |
|-----------|
1. | 1 2010 |
2. | 1 2011 |
3. | 1 2012 |
4. | 1 2013 |
5. | 1 2014 |
6. | 1 2015 |
7. | 1 2016 |
8. | 1 2017 |
9. | 1 2018 |
10. | 1 2019 |
11. | 1 2020 |
|-----------|
12. | 2 2014 |
13. | 2 2015 |
14. | 2 2016 |
15. | 2 2017 |
16. | 2 2018 |
|-----------|
17. | 3 2011 |
18. | 3 2012 |
19. | 3 2015 |
20. | 3 2016 |
21. | 3 2017 |
22. | 3 2018 |
23. | 3 2019 |
24. | 3 2020 |
|-----------|
25. | 4 2011 |
26. | 4 2012 |
27. | 4 2015 |
28. | 4 2016 |
29. | 4 2017 |
30. | 4 2018 |
+-----------+
merge 1:1 id year
之后是
gen flag = _merge == 3
```
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.