根据特定日期扩展数据集

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 |
     +-------------------+