Reputation: 1059
How do I do a fuzzy match (approximately 75% match) between two variables in a Stata dataset?
In my example, I am producing Match_yes = 1
if the value in Brand_1
is present in Brand_2
:
**Brand_1 Brand_2 Match_yes**
Samsung Samsung 1
Microsoft Apple 0
Apple Sony 1
Panasonic Motorola 0
Miumiu 0
Mottorrola 1
LG 0
How do I get the value Mottorrola
under variable Brand_1
to produce a Match_yes = 1
, as it is 80% similar to the value Motorola
in variable Brand_2
?
Upvotes: 0
Views: 1468
Reputation:
Using your toy example:
clear
input strL(Brand_1 Brand_2)
Samsung Samsung
Microsoft Apple
Apple Sony
Panasonic Motorola
Miumiu
Mottorrola
LG
end
Here is a 'hack' using the community-contributed command matchit
to produce the desired output:
local obs = _N
generate Cont = 0
forvalues i = 1 / `obs' {
forvalues j = 1 / `obs' {
replace Cont = 1 if Brand_1[`i'] == Brand_2[`j'] in `i'
generate b1 = Brand_1[`i'] in 1
generate b2 = Brand_2[`j'] in 1
matchit b1 b2, generate(simscore)
generate score`i'`j' = simscore
replace Cont = 1 if score`i'`j'[1] > 0.80 in `i'
drop b1 b2 simscore
}
}
drop score*
list
+------------------------------+
| Brand_1 Brand_2 Cont |
|------------------------------|
1. | Samsung Samsung 1 |
2. | Microsoft Apple 0 |
3. | Apple Sony 1 |
4. | Panasonic Motorola 0 |
5. | Miumiu 0 |
|------------------------------|
6. | Mottorrola 1 |
7. | LG 0 |
+------------------------------+
Upvotes: 1