Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Indicator variable based on change in string variable

    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?

  • #2
    Code:
    bys gvkey (year): gen wanted=regexm(rating[_n-1], "^A") & regexm(rating, "^BB")

    Comment


    • #3
      Originally posted by Andrew Musau View Post
      Code:
      bys gvkey (year): gen wanted=regexm(rating[_n-1], "^A") & regexm(rating, "^BB")
      Thank you. Does the ^ mean "starting with"? so ^A would be A/AA/AAA?

      Comment


      • #4
        Yes.

        Comment

        Working...
        X