Announcement

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

  • Lag a variable by year in monthly data

    Please consider the following example data set, I want to lag the variable cap by one year, however, my data is monthly data, how can this be done, thanks.
    Code:
    clear
    input str8 ticker float month double(ri cap fyear)
    "AAT" 612      . 745895.1875 2011
    "AAT" 613  .0127 755354.5625 2011
    "AAT" 614 -.0056 832933.1875 2011
    "AAT" 615  .0381 864652.8125 2011
    "AAT" 616  .0154 880747.3125 2011
    "AAT" 617  .0107 881925.8125 2011
    "AAT" 618 -.0205  863855.125 2011
    "AAT" 619  -.085  790394.125 2011
    "AAT" 620 -.0974 705147.8125 2011
    "AAT" 621  .1292 796286.6875 2011
    "AAT" 622  .0183   810821.75 2011
    "AAT" 623  .0039  805714.875 2011
    "AAT" 624  .0795   869747.75 2012
    "AAT" 625  -.028 845391.6875 2012
    "AAT" 626  .0692      895698 2012
    "AAT" 627  .0311  923613.875 2012
    "AAT" 628 -.0391   887470.75 2012
    "AAT" 629  .0828    952685.5 2012
    "AAT" 630  .0722     1021436 2012
    "AAT" 631  .0485  1071127.25 2012
    "AAT" 632 -.0095   1052659.5 2012
    "AAT" 633  .0142 1067590.875 2012
    "AAT" 634  .0022  1079043.25 2012
    "AAT" 635  .0334 1106782.125 2012
    end
    format %tm month

  • #2
    Using lags in analyses, lagging by 12 months:
    Code:
    reg y L12.cap
    Creating the lags manually
    Code:
    bys ticker: gen caplag =cap[_n-12]

    Comment


    • #3
      Thank you for your reply. The problem is that my time variable is not equally spaced, so I was looking for a general approach, rather than fixed time length, as your code suggests

      Comment


      • #4
        Your time variable ("month") does appear to be equally-spaced in the example provided:

        Code:
        . list, sepby(fyear) noobs
        
          +-----------------------------------------------+
          | ticker     month       ri         cap   fyear |
          |-----------------------------------------------|
          |    AAT    2011m1        .   745895.19    2011 |
          |    AAT    2011m2    .0127   755354.56    2011 |
          |    AAT    2011m3   -.0056   832933.19    2011 |
          |    AAT    2011m4    .0381   864652.81    2011 |
          |    AAT    2011m5    .0154   880747.31    2011 |
          |    AAT    2011m6    .0107   881925.81    2011 |
          |    AAT    2011m7   -.0205   863855.13    2011 |
          |    AAT    2011m8    -.085   790394.13    2011 |
          |    AAT    2011m9   -.0974   705147.81    2011 |
          |    AAT   2011m10    .1292   796286.69    2011 |
          |    AAT   2011m11    .0183   810821.75    2011 |
          |    AAT   2011m12    .0039   805714.88    2011 |
          |-----------------------------------------------|
          |    AAT    2012m1    .0795   869747.75    2012 |
          |    AAT    2012m2    -.028   845391.69    2012 |
          |    AAT    2012m3    .0692      895698    2012 |
          |    AAT    2012m4    .0311   923613.88    2012 |
          |    AAT    2012m5   -.0391   887470.75    2012 |
          |    AAT    2012m6    .0828    952685.5    2012 |
          |    AAT    2012m7    .0722     1021436    2012 |
          |    AAT    2012m8    .0485   1071127.3    2012 |
          |    AAT    2012m9   -.0095   1052659.5    2012 |
          |    AAT   2012m10    .0142   1067590.9    2012 |
          |    AAT   2012m11    .0022   1079043.3    2012 |
          |    AAT   2012m12    .0334   1106782.1    2012 |
          +-----------------------------------------------+
        
        
        . tsset month
                time variable:  month, 2011m1 to 2012m12
                        delta:  1 month
        Please clarify what the issues are -- provide an example of your "problematic" observations, and how you want to handle them.

        Comment


        • #5
          My data set contains gaps, so see this example
          Code:
          clear
          input str8 ticker float month double(cap fyear)
          "AAT" 612 745895.1875 2011
          "AAT" 613 755354.5625 2011
          "AAT" 614 832933.1875 2011
          "AAT" 615 864652.8125 2011
          "AAT" 616 880747.3125 2011
          "AAT" 618 863855.125 2011
          "AAT" 619 790394.125 2011
          "AAT" 620 705147.8125 2011
          "AAT" 621 796286.6875 2011
          "AAT" 622 810821.75 2011
          "AAT" 623 805714.875 2011
          "AAT" 624 869747.75 2012
          "AAT" 625 845391.6875 2012
          "AAT" 626 895698 2012
          "AAT" 627 923613.875 2012
          "AAT" 629 952685.5 2012
          "AAT" 630 1021436 2012
          "AAT" 631 1071127.25 2012
          "AAT" 632 1052659.5 2012
          "AAT" 633 1067590.875 2012
          "AAT" 634 1079043.25 2012
          "AAT" 635 1106782.125 2012
          end
          format %tm month

          Comment


          • #6
            This in effect has already been answered. Jorrit Gosens in #2 pointed you towards time series operators. One of several merits of such operators is that they are smart about gaps. So, find out about tsset and time series operators.


            Code:
            clear
            input str8 ticker float month double(cap fyear)
            "AAT" 612 745895.1875 2011
            "AAT" 613 755354.5625 2011
            "AAT" 614 832933.1875 2011
            "AAT" 615 864652.8125 2011
            "AAT" 616 880747.3125 2011
            "AAT" 618 863855.125 2011
            "AAT" 619 790394.125 2011
            "AAT" 620 705147.8125 2011
            "AAT" 621 796286.6875 2011
            "AAT" 622 810821.75 2011
            "AAT" 623 805714.875 2011
            "AAT" 624 869747.75 2012
            "AAT" 625 845391.6875 2012
            "AAT" 626 895698 2012
            "AAT" 627 923613.875 2012
            "AAT" 629 952685.5 2012
            "AAT" 630 1021436 2012
            "AAT" 631 1071127.25 2012
            "AAT" 632 1052659.5 2012
            "AAT" 633 1067590.875 2012
            "AAT" 634 1079043.25 2012
            "AAT" 635 1106782.125 2012
            end
            format %tm month
            egen nticker = group(ticker), label 
            tsset nticker month 
            gen lycap = L12.cap 
            
            
            list, sepby(ticker)
            
                 +-----------------------------------------------------------+
                 | ticker     month         cap   fyear   nticker      lycap |
                 |-----------------------------------------------------------|
              1. |    AAT    2011m1   745895.19    2011       AAT          . |
              2. |    AAT    2011m2   755354.56    2011       AAT          . |
              3. |    AAT    2011m3   832933.19    2011       AAT          . |
              4. |    AAT    2011m4   864652.81    2011       AAT          . |
              5. |    AAT    2011m5   880747.31    2011       AAT          . |
              6. |    AAT    2011m7   863855.13    2011       AAT          . |
              7. |    AAT    2011m8   790394.13    2011       AAT          . |
              8. |    AAT    2011m9   705147.81    2011       AAT          . |
              9. |    AAT   2011m10   796286.69    2011       AAT          . |
             10. |    AAT   2011m11   810821.75    2011       AAT          . |
             11. |    AAT   2011m12   805714.88    2011       AAT          . |
             12. |    AAT    2012m1   869747.75    2012       AAT   745895.2 |
             13. |    AAT    2012m2   845391.69    2012       AAT   755354.6 |
             14. |    AAT    2012m3      895698    2012       AAT   832933.2 |
             15. |    AAT    2012m4   923613.88    2012       AAT   864652.8 |
             16. |    AAT    2012m6    952685.5    2012       AAT          . |
             17. |    AAT    2012m7     1021436    2012       AAT   863855.1 |
             18. |    AAT    2012m8   1071127.3    2012       AAT   790394.1 |
             19. |    AAT    2012m9   1052659.5    2012       AAT   705147.8 |
             20. |    AAT   2012m10   1067590.9    2012       AAT   796286.7 |
             21. |    AAT   2012m11   1079043.3    2012       AAT   810821.8 |
             22. |    AAT   2012m12   1106782.1    2012       AAT   805714.9 |
                 +-----------------------------------------------------------+

            Comment

            Working...
            X