根据特定日期扩展数据集
Extending dataset based on certain date
请帮我解决以下问题。我需要将以下基于公司(“gvkey”)和 event_date 数据的数据集扩展 +3 -3 年。例如,对于 gvkey = 025342 (event_date = 2002) 和 gvkey = 146171 (event_date = 2016) 我希望是这样的:
gvkey fyear t_sample event_date
25342 1998 0 1999
25342 1999 0 2000
25342 2000 0 2001
25342 2001 0 2002
25342 2002 0 2003
25342 2003 0 2004
25342 2004 0 2005
146171 2012 1 2013
146171 2013 1 2014
146171 2014 1 2015
146171 2015 1 2016
146171 2016 1 2017
146171 2017 1 2018
146171 2018 1 2019
我附上以下数据:
input str6 gvkey double fyear float(t_sample event_date)
"025342" 2001 0 2002
"062977" 2001 0 2002
"133726" 2003 0 2004
"125014" 2007 0 2008
"177225" 2013 0 2014
"061550" 2002 0 2003
"013704" 2003 0 2004
"131423" 2002 0 2003
"108692" 2008 0 2009
"030688" 2006 0 2007
"148390" 2009 0 2010
"157755" 2014 0 2015
"132599" 2004 0 2005
"025234" 2002 0 2003
"004066" 2004 0 2005
"030451" 2001 0 2002
"065406" 2011 0 2012
"063004" 2001 0 2002
"006461" 2005 0 2006
"184604" 2013 0 2014
"145911" 2002 0 2003
"013092" 2004 0 2005
"189491" 2011 0 2012
"025013" 2006 0 2007
"160232" 2005 0 2006
"009459" 2003 0 2004
"066050" 2005 0 2006
"062317" 2007 0 2008
"133525" 2004 0 2005
"101020" 2008 0 2009
"008288" 2002 0 2003
"066698" 2002 0 2003
"016401" 2015 0 2016
"062874" 2003 0 2004
"012215" 2006 0 2007
"063483" 2007 0 2008
"183022" 2014 0 2015
"146137" 2014 0 2015
"025375" 2002 0 2003
"064747" 2004 0 2005
"062686" 2004 0 2005
"025283" 2005 0 2006
"023774" 2004 0 2005
"025773" 2001 0 2002
"028347" 2005 0 2006
"030925" 2003 0 2004
"062261" 2004 0 2005
"027938" 2002 0 2003
"141076" 2003 0 2004
"031738" 2002 0 2003
"146171" 2015 1 2016
"063054" 2003 1 2004
"030760" 2001 1 2002
"002950" 2002 1 2003
"008687" 2003 1 2004
"030843" 2003 1 2004
"063052" 2002 1 2003
"025676" 2004 1 2005
"029085" 2001 1 2002
"062036" 2004 1 2005
"155394" 2009 1 2010
"066530" 2004 1 2005
"003776" 2001 1 2002
"004675" 2003 1 2004
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
input str6 gvkey event_date
025342 2002
146171 2016
end
gen original_event_date = event_date
expand = 7
bysort gvkey: replace event_date = original_event_date - 3 if _n == 1
bysort gvkey: replace event_date = original_event_date - 2 if _n == 2
bysort gvkey: replace event_date = original_event_date - 1 if _n == 3
bysort gvkey: replace event_date = original_event_date + 1 if _n == 5
bysort gvkey: replace event_date = original_event_date + 2 if _n == 6
bysort gvkey: replace event_date = original_event_date + 3 if _n == 7
drop original_event_date
sort gvkey
list, sepby(gvkey)
输出:
+-------------------+
| gvkey event_~e |
|-------------------|
1. | 025342 1999 |
2. | 025342 2000 |
3. | 025342 2001 |
4. | 025342 2002 |
5. | 025342 2003 |
6. | 025342 2004 |
7. | 025342 2005 |
|-------------------|
8. | 146171 2013 |
9. | 146171 2014 |
10. | 146171 2015 |
11. | 146171 2016 |
12. | 146171 2017 |
13. | 146171 2018 |
14. | 146171 2019 |
+-------------------+
请帮我解决以下问题。我需要将以下基于公司(“gvkey”)和 event_date 数据的数据集扩展 +3 -3 年。例如,对于 gvkey = 025342 (event_date = 2002) 和 gvkey = 146171 (event_date = 2016) 我希望是这样的:
gvkey fyear t_sample event_date
25342 1998 0 1999
25342 1999 0 2000
25342 2000 0 2001
25342 2001 0 2002
25342 2002 0 2003
25342 2003 0 2004
25342 2004 0 2005
146171 2012 1 2013
146171 2013 1 2014
146171 2014 1 2015
146171 2015 1 2016
146171 2016 1 2017
146171 2017 1 2018
146171 2018 1 2019
我附上以下数据:
input str6 gvkey double fyear float(t_sample event_date)
"025342" 2001 0 2002
"062977" 2001 0 2002
"133726" 2003 0 2004
"125014" 2007 0 2008
"177225" 2013 0 2014
"061550" 2002 0 2003
"013704" 2003 0 2004
"131423" 2002 0 2003
"108692" 2008 0 2009
"030688" 2006 0 2007
"148390" 2009 0 2010
"157755" 2014 0 2015
"132599" 2004 0 2005
"025234" 2002 0 2003
"004066" 2004 0 2005
"030451" 2001 0 2002
"065406" 2011 0 2012
"063004" 2001 0 2002
"006461" 2005 0 2006
"184604" 2013 0 2014
"145911" 2002 0 2003
"013092" 2004 0 2005
"189491" 2011 0 2012
"025013" 2006 0 2007
"160232" 2005 0 2006
"009459" 2003 0 2004
"066050" 2005 0 2006
"062317" 2007 0 2008
"133525" 2004 0 2005
"101020" 2008 0 2009
"008288" 2002 0 2003
"066698" 2002 0 2003
"016401" 2015 0 2016
"062874" 2003 0 2004
"012215" 2006 0 2007
"063483" 2007 0 2008
"183022" 2014 0 2015
"146137" 2014 0 2015
"025375" 2002 0 2003
"064747" 2004 0 2005
"062686" 2004 0 2005
"025283" 2005 0 2006
"023774" 2004 0 2005
"025773" 2001 0 2002
"028347" 2005 0 2006
"030925" 2003 0 2004
"062261" 2004 0 2005
"027938" 2002 0 2003
"141076" 2003 0 2004
"031738" 2002 0 2003
"146171" 2015 1 2016
"063054" 2003 1 2004
"030760" 2001 1 2002
"002950" 2002 1 2003
"008687" 2003 1 2004
"030843" 2003 1 2004
"063052" 2002 1 2003
"025676" 2004 1 2005
"029085" 2001 1 2002
"062036" 2004 1 2005
"155394" 2009 1 2010
"066530" 2004 1 2005
"003776" 2001 1 2002
"004675" 2003 1 2004
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
input str6 gvkey event_date
025342 2002
146171 2016
end
gen original_event_date = event_date
expand = 7
bysort gvkey: replace event_date = original_event_date - 3 if _n == 1
bysort gvkey: replace event_date = original_event_date - 2 if _n == 2
bysort gvkey: replace event_date = original_event_date - 1 if _n == 3
bysort gvkey: replace event_date = original_event_date + 1 if _n == 5
bysort gvkey: replace event_date = original_event_date + 2 if _n == 6
bysort gvkey: replace event_date = original_event_date + 3 if _n == 7
drop original_event_date
sort gvkey
list, sepby(gvkey)
输出:
+-------------------+
| gvkey event_~e |
|-------------------|
1. | 025342 1999 |
2. | 025342 2000 |
3. | 025342 2001 |
4. | 025342 2002 |
5. | 025342 2003 |
6. | 025342 2004 |
7. | 025342 2005 |
|-------------------|
8. | 146171 2013 |
9. | 146171 2014 |
10. | 146171 2015 |
11. | 146171 2016 |
12. | 146171 2017 |
13. | 146171 2018 |
14. | 146171 2019 |
+-------------------+