Нечеткое совпадение для двух переменных в наборе данных - PullRequest
0 голосов
/ 10 октября 2018

Как сделать нечеткое совпадение (примерно 75% совпадение) между двумя переменными в наборе данных Stata?

В моем примере я создаю Match_yes = 1, если значение в Brand_1 присутствует в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

Как получить значение Mottorrola в переменной Brand_1 для получения Match_yes = 1, так как оно на 80% похоже на значение Motorola в переменной Brand_2 * * 1014

1 Ответ

0 голосов
/ 10 октября 2018

Пример использования вашей игрушки:

clear

input strL(Brand_1 Brand_2)
Samsung     Samsung     
Microsoft   Apple          
Apple       Sony           
Panasonic   Motorola       
Miumiu                     
Mottorrola                  
LG                          
end 

Вот «хак», использующий команду сообщества matchit для получения желаемого результата:

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 |
     +------------------------------+
...