- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Hello,
I run the following proc psmatch procedure:
ods graphics on;
proc psmatch data=WORK.QUERY_FOR_FINAL3 region=treated(extend(distance=ps mult=one)=0.025);
class firm_type sic3digit;
psmodel firm_type(Treated='1')= sic3digit tenure_log_atb tenure_lag_e_bxi_a;
match distance=ps method=varratio(kmin=1 kmax=4) exact=(sic3digit) caliper=.;
assess ps var=(sic3digit tenure_log_atb tenure_lag_e_bxi_a)
/ stddev=pooled(allobs=no) nmatchmost=5
plots(orient=vertical nodetails);
id sic3digit;
output out(obs=match)=OutEx4a matchid=_MatchID;
run;
and received the following error message:
ERROR: A feasible variable ratio matching that has the specified parameters does not exist.
does anyone know what its mean?
thank you
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
That error means that there is no feasible matching that satisfies all the conditions imposed on the matching problem. Those conditions would include the support region that is used, the caliper value, the conditions imposed by the EXACT= option, and conditions imposed by the type of matching you have requested. For the optimal matching methods if there are observations in the treatment condition that cannot be matched given all these conditions the procedure will return this error. For the greedy matching methods a treated unit that cannot be matched will result in a warning message being printed but the matching would continue.
Looking at your example code possible reasons for this error could be that restricted to the extended treated group support region you've specified there are more observations in the treatment condition than there are observations in the control condition. Also, because the EXACT= option is used this error could occur if within the support region and a level of the variable sic3digit there are more treated units than control units. Often a restrictive caliper can be responsible for this error, but that wouldn't be the case in your example with caliper=. specified to remove that constraint.
The number of treated and control units in the support region is displayed in the "Propensity Score Information" table. To see if the other constraints might be causing the matching to be infeasible you could try running the procedure with them removed to identify the cause. Also if you modify the OUTPUT statement to be
output out(obs=region)=OutEx4a matchid=_MatchID;
then I believe even if a feasible matching does not exist an output data set with only the observations in the support region should still be produced, and you can investigate properties of that data set to see what might be causing the matching not to be feasible.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
That error means that there is no feasible matching that satisfies all the conditions imposed on the matching problem. Those conditions would include the support region that is used, the caliper value, the conditions imposed by the EXACT= option, and conditions imposed by the type of matching you have requested. For the optimal matching methods if there are observations in the treatment condition that cannot be matched given all these conditions the procedure will return this error. For the greedy matching methods a treated unit that cannot be matched will result in a warning message being printed but the matching would continue.
Looking at your example code possible reasons for this error could be that restricted to the extended treated group support region you've specified there are more observations in the treatment condition than there are observations in the control condition. Also, because the EXACT= option is used this error could occur if within the support region and a level of the variable sic3digit there are more treated units than control units. Often a restrictive caliper can be responsible for this error, but that wouldn't be the case in your example with caliper=. specified to remove that constraint.
The number of treated and control units in the support region is displayed in the "Propensity Score Information" table. To see if the other constraints might be causing the matching to be infeasible you could try running the procedure with them removed to identify the cause. Also if you modify the OUTPUT statement to be
output out(obs=region)=OutEx4a matchid=_MatchID;
then I believe even if a feasible matching does not exist an output data set with only the observations in the support region should still be produced, and you can investigate properties of that data set to see what might be causing the matching not to be feasible.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Thank you very much for the explanation. I decided to use the greedy matching method and received good results.
best regards,
Lior
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Glad to help.