2014-03-20 5 views
4

У меня есть две переменные строки, которые различаются по одному символу для каждого наблюдения. Мне нужно получить позицию этого другого персонажа. Я попытался использовать функцию indexnot(), но он дает ложные результаты, так как символы в обеих строках одинаковы. Вот наглядный пример, и переменная position это один я пытаюсь добраться до:Stata: Сравнение строковых переменных

+--------------+--------------+-----------+ 
| String 1 | String 2 | Position | 
+--------------+--------------+-----------+ 
| 000002002000 | 000000002000 |   6 | 
| 000002102000 | 000002002000 |   7 | 
| 000002112000 | 000002102000 |   8 | 
| 000002112020 | 000002112000 |  11 | 
| 000002112120 | 000002112020 |  10 | 
+--------------+--------------+-----------+ 

ответ

5
gen Position = . 

quietly forval j = 1/12 { 
    replace Position = `j' if substr(String1, `j', 1) != substr(String2, `j', 1) & missing(Position) 
} 

Комментарий, пожалуй, излишним здесь, но не будет вредить не один.

В отсутствие встроенной функции для этого вам необходимо написать код, используя существующие команды и функции. Инициализируйте Position отсутствующим (ноль в порядке альтернативы). Затем цикл над символами, здесь от 1 до 12, потому что пример показывает 12 символов. Мы записываем положение первой разницы в символах. Обратите внимание, как условие missing(Position) (Position == ., если хотите) ограничивает изменения в соответствии с первой разницей.

Stata автоматически перемещается по всем наблюдениям здесь, поэтому нужен только цикл, расположенный по строкам.

Смежные вопросы