Announcement

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

  • [PS match] How to make sure the firm that matched to one treated firm will not be matched to another firm from different year

    Hi all,

    I am running propensity score matching for my dataset. I use firm-year observation to run the PSM, I have set an exact match to make sure the firm-year observations will be matched exactly in the same year and in the same industry. I also set no replacement, one-on-one match. My question is that the no replacement criteria only applies to the firm-year observation level. For example, if company A matched to one of the treated companies in the year 2009, it can still be matched again to another company in the year 2012. I want the firm-level one-on-one match, which means one treated firm will have one unique control firm that matches with it. And then I will keep all the firm-year observations for both the treated and control companies.

    Can anyone please advise on how to achieve that? Many thanks.
    Last edited by Iris Song Teo; 25 Jan 2023, 23:02. Reason: Propensity score matching, one-on-one match, no replacement

  • #2
    perhaps the -noreplacement- option does that

    Comment


    • #3
      Thanks, George. But no replacement only ensures the same firm-year observation won't be picked twice, but can't make sure the same firm won't be picked again like what I am trying to achieve here.

      Comment


      • #4
        Are you using psmatch2?

        Comment


        • #5
          what if you added year as a variable? or mahal(year)?

          Comment


          • #6
            psmatch2 allows you to specify the pscore (with the pscore option). So, you could use psmatch2 to estimate the propensity score by year, keep those, and then use them in as the pscore.

            It might look something like this.

            Code:
            g ps = .
            forv yr = 2010/2020 {
                 psmatch2 treat x1 x2 x3 if year==`yr', outcome(y) 
                 replace ps = _pscore if year==`yr'
            }
            psmatch2 treat , outcome(y) pscore(ps)

            Comment


            • #7
              Yes, I am using psmatch2. I have already set the exact match before I run psmatch2, see the codes below. But my problem is the noreplacement option can only make sure the same firm-year observation won't be picked twice, but the same control firm can still be picked by matching with two different treated firms from two different years. I want to know if there's a good way to make sure each control firm (not the firm-year observation) can be only matched to one treated firm. Thanks!

              my data is panel data, id = firm, time = fiscal year (fyear)

              logit treat x1, x2, x3
              predict ps

              egen exactmatch = group (fyear sic_2)

              gen pscore = 1000*exactmatch + ps

              psmatch2 treat, pscore(pscore) cal(0.05) common noreplace

              Comment


              • #8
                The main reason that I am asking is that my treated samples are too small and too precious to waste any of them.

                I have found a rather tedious way to get what I want, but I am not sure if there are any issues with this.

                For the control firms that match multiple treated firms, I kept the best match (based on the ps score) and manually unmatch the rest of them. After saving the matched samples (treated and control firms) to another file, I run the PS match again on the rest of the sample and continue this way until I match most of my treated samples.

                Any comments on this method? Greatly appreciate it.

                Comment


                • #9
                  Hi All,
                  I want to apply DID on M&A dataset. I want that the control sample (non-M&A companies) should be selected from the same industry of the treatment sample (M&A companies). I have 12 different industries and 10 different countries.

                  What should be added to below code so that the matching is done within the same industry and country?

                  psmatch2 treat x1, x2 , ai(1) caliper(0.1) common noreplacement descending


                  Many Thanks
                  Regards

                  Comment

                  Working...
                  X