Using Propensity Score Matching to select similar firms

Reply
Contributor
Posts: 40

Using Propensity Score Matching to select similar firms

Hi All

 

Thanks in advance for the help to solve my problem; 

 

My problem is outlined below;

 

From Column 2 in Table 1 shows firms that are linked to a specific firm. So for instance, firm with id 101 is linked to firm with id 102,104 and 103 while firm with id number 102 is linked with two firms thus 104 and 101.

Table 1: Interconnected firms

ID

Firmid1

Firmid2

Firmid3

Firmid4

101

102

104

103

 

102

104

101

 

 

103

101

103

104

 

104

104

1002

101

 

 

Table 2 indicates firm characteristics (size,roa)

date

ID

size

Roa

2010

101

6

12

2011

101

2

14

2012

101

5

13

2010

102

2

19

2011

102

4

14

2012

102

2

12

2010

103

3

13

2011

103

2

16

2012

103

1

19

2010

104

6

9

2011

104

7

8

2012

104

8

10

 

What I want to do is that, for the list of firms connected to a specific firm in table 1, I want to use propensity score matching to match firms that have similar characteristics and are connected using size and roa from table 2. So for instance from table 1, firm with id 101 is linked to 3 firms thus 102,104 and 103. Hence from the three firms linked to 101, I want to use propensity score matching to establish which of the three firms have similar features with 101 using size, roa.

 

Thanks for the help. 

 

 

Super User
Posts: 10,761

Re: Using Propensity Score Matching to select similar firms

The best choice is use SAS/OR to get this kind fo connection component.

After link all these ID up, it is easy to get what you want.

 

data x;
input ID Firmid1 Firmid2 Firmid3 Firmid4;
cards;
101 102 104 103 .
102 104 101 . .
103 101 103 104 .
104 104 1002 101 .
;
run;
data have;
 set x;
 array x{*} Firmid1-Firmid4;
 from=id;
 do i=1 to dim(x);
   if not missing(x{i}) then do;to=x{i};output;end;
 end;
 keep from to;
run;


data full;
  set have end=last;
  if _n_ eq 1 then do;
   declare hash h();
    h.definekey('node');
     h.definedata('node');
     h.definedone();
  end;
  output;
  node=from; h.replace();
  from=to; to=node;
  output;
  node=from; h.replace();
  if last then h.output(dataset:'node');
  drop node;
run;


data want(keep=node household);
declare hash ha(ordered:'a');
declare hiter hi('ha');
ha.definekey('count');
ha.definedata('last');
ha.definedone();
declare hash _ha(hashexp: 20);
_ha.definekey('key');
_ha.definedone();

if 0 then set full;
declare hash from_to(dataset:'full(where=(from is not missing and to is not missing))',hashexp:20,multidata:'y');
 from_to.definekey('from');
 from_to.definedata('to');
 from_to.definedone();

if 0 then set node;
declare hash no(dataset:'node');
declare hiter hi_no('no');
 no.definekey('node');
 no.definedata('node');
 no.definedone();
 

do while(hi_no.next()=0);
 household+1; output;
 count=1;
 key=node;_ha.add();
 last=node;ha.add();
 rc=hi.first();
 do while(rc=0);
   from=last;rx=from_to.find();
   do while(rx=0);
     key=to;ry=_ha.check();
      if ry ne 0 then do;
       node=to;output;rr=no.remove(key:node);
       key=to;_ha.add();
       count+1;
       last=to;ha.add();
      end;
      rx=from_to.find_next();
   end;
   rc=hi.next();
end;
ha.clear();_ha.clear();
end;
stop;
run;
Contributor
Posts: 40

Re: Using Propensity Score Matching to select similar firms

Dear KSharp

Thanks very much for the great help. Sorry for late update to your reply on my problem.

I have followed the codes closely  but the final output which is dataset want contains only two columns thus node and household.

Please at what point do I use table 2 as expounded in my problem in your codes. Thanks very much.

 

 

SAS Super FREQ
Posts: 4,237

Re: Using Propensity Score Matching to select similar firms

Check out PROC PSMATCH in SAS/STAT, which performs propensity score matching.

Ask a Question
Discussion stats
  • 3 replies
  • 123 views
  • 1 like
  • 3 in conversation