calipmatch matches case observations to control observations using "caliper" matching and (optionally) exact matching. Controls observations matched to a case observation will have values within +/- the caliper width for every caliper matching variable. Matched observations will also have identical values for every specified exact matching variable, if any are specified.
calipmatch supports 1:1 or 1:m matching of cases to controls, without replacement.
calipmatch was written in collaboration with Allan Garland, of the University of Manitoba Faculty of Medicine.
It is now available in the SSC, with thanks to Kit Baum. It can also be viewed
on Github.
Details
This program allows you to perform fuzzy case-control matching, matching cases to controls that have close-but-not-identical values for caliper matching variables. You specify a "caliper width" for each caliper matching variable, and all controls matched to a case will have values within +/- that width for the corresponding variable.
Controls are randomly matched to cases without replacement. For each case,
calipmatch searches for matching controls until it either finds the pre-specified maximum number of matches or runs out of controls. The search is performed greedily: it is possible that some cases end up unmatched because all possible matching controls have already been matched with another case.
calipmatch is optimized to run extremely efficiently. Exact matching is performed before caliper matching, using a sort. Caliper matching is implemented in Mata, and searches only within exact match groups. This program was created because our original caliper matching Stata code ran on our problem for 10 days without completion. The version of
calipmatch now available to you on SSC completed our matching problem in under 5 minutes.