Hi,

I'm dealing with (unbalanced) panel data.
Code:
* Example generated by -dataex-. To install: ssc install dataex
clear
input long gvkey double year str10 rating float(rating2 changerating changetospec)
1078 2002 "AA"   2 . 0
1078 2003 "AA"   2 . 0
1078 2004 "AA"   2 . 0
1078 2005 "AA"   2 . 0
1078 2006 "AA"   2 . 0
1078 2007 "AA"   2 . 0
1078 2008 "AA"   2 . 0
1078 2009 "AA"   2 . 0
1078 2010 "AA"   2 . 0
1078 2011 "AA"   2 . 0
1078 2012 "A"    3 . 0
1078 2013 "A"    3 . 0
1078 2014 "A"    3 . 0
1078 2015 "A"    3 . 0
1078 2016 "A"    3 . 0
1161 2002 "B"    . . 0
1161 2003 "B"    . . 0
1161 2004 "B"    . . 0
1161 2005 "B"    . . 0
1161 2006 "B"    . . 0
1161 2007 "B"    . . 0
1161 2008 "B"    . . 0
1161 2009 "B"    . . 0
1161 2010 "B"    . . 0
1161 2011 "B"    . . 0
1161 2012 "B"    . . 0
1161 2013 "B"    . . 0
1161 2014 "B"    . . 0
1161 2015 "B"    . . 0
1161 2016 "CCC"  . . 0
1209 2002 "A"    3 . 0
1209 2003 "A"    3 . 0
1209 2004 "A"    3 . 0
1209 2005 "A"    3 . 0
1209 2006 "A"    3 . 0
1209 2007 "A"    3 . 0
1209 2008 "A"    3 . 0
1209 2009 "A"    3 . 0
1209 2010 "A"    3 . 0
1209 2011 "A"    3 . 0
1209 2012 "A"    3 . 0
1209 2013 "A"    3 . 0
1209 2014 "A"    3 . 0
1209 2015 "A"    3 . 0
1209 2016 "A"    3 . 0
1239 2002 "BBB" 10 . 0
1239 2003 "BBB" 10 . 1
1239 2004 "BBB" 10 . 0
1239 2005 "BBB" 10 . 1
1239 2006 "BBB" 10 . 0
1239 2007 "BBB" 10 . 0
1239 2008 "BBB" 10 . 0
1239 2009 "BBB" 10 . 0
1239 2010 "BBB" 10 . 0
1356 2002 "A"    3 . 0
1356 2003 "A"    3 . 0
1356 2004 "A"    3 . 0
1356 2005 "A"    3 . 0
1356 2006 "A"    3 . 0
1356 2007 "BBB" 10 . 0
1356 2008 "BBB" 10 . 0
1356 2009 "BBB" 10 . 0
1356 2010 "BBB" 10 . 1
1356 2011 "BBB" 10 . 0
1356 2012 "BBB" 10 . 0
1356 2013 "BBB" 10 . 1
1356 2014 "BBB" 10 . 0
1356 2015 "BBB" 10 . 1
1408 2002 "A"    3 . 0
1408 2003 "A"    3 . 0
1408 2004 "A"    3 . 0
1408 2005 "A"    3 . 0
1408 2006 "BBB" 10 . 0
1408 2007 "BBB" 10 . 1
1408 2008 "BBB" 10 . 0
1408 2009 "BBB" 10 . 0
1408 2010 "BBB" 10 . 0
1408 2011 "BBB" 10 . 1
1408 2012 "BBB" 10 . 1
1408 2013 "BBB" 10 . 0
1468 2002 "BBB" 10 . 0
1468 2003 "BBB" 10 . 1
1468 2004 "BBB" 10 . 1
1468 2005 "BBB" 10 . 0
1468 2006 "BBB" 10 . 0
1468 2007 "BBB" 10 . 0
1468 2008 "BBB" 10 . 0
1468 2009 "BB"  20 . 0
1468 2010 "BB"  20 . 0
1468 2011 "BB"  20 . 0
1468 2012 "BB"  20 . 0
1533 2002 "BB"  20 . 1
1533 2003 "BB"  20 . 1
1533 2004 "B"    . . 0
1533 2005 "B"    . . 0
1533 2006 "B"    . . 0
1533 2007 "B"    . . 0
1533 2008 "B"    . . 0
1533 2009 "B"    . . 0
1533 2010 "B"    . . 0
end
I want to create a dummy variable that's equal to 1 if my variable credit rating (rating) changes to a BB or BBB rating from AAA, AA, or A. To do so I do the following:

g rating2 =.
replace rating2=1 if rating=="AAA"
replace rating2=2 if rating=="AA"
replace rating2=3 if rating=="A"
replace rating2=10 if rating=="BBB"
replace rating2=20 if rating=="BB"

* from AAA to BBB or AA to BBB or A to BBB
*rating2[_n] - rating2[_n-1] = 9 | rating2[_n] - rating2[_n-1] =8 | rating2[_n] - rating2[_n-1] = 7
* from AAA to BB or AA to BB or A to BB
*rating2[_n] - rating2[_n-1] = 19 | rating2[_n] - rating2[_n-1] = 18 | rating2[_n] - rating2[_n-1] = 17

So a rating changes to a speculative grade if the difference between the two is equal to the values above
Then,

g changerating = rating2[_n] - rating2[_n-1]
g changetospec = 0
replace changetospec = 1 if changerating == 7 | changerating == 8 | changerating == 9 | changerating == 17 | changerating == 18 |changerating == 19

I know the code is rather crazy, but I don't know how to achieve this in any other way and regardless, it seems to me it should give me what I am looking for. However, when I browse my data I see "changetospec" is assigned a 1 even if the rating goes from BBB at t=1 to BBB at t+1 (but "changerating" = 0 in those cases.)


Can someone help me with this?