Stata:比较字符串变量

use*_*264 4 stata

我有两个字符串变量,每个观察一个字符不同.我需要得到那个不同角色的位置.我试图使用indexnot()函数,但它会产生错误的结果,因为两个字符串中的字符是相同的.这是一个说明性的例子,变量position是我想要的变量:

+--------------+--------------+-----------+
|   String 1   |   String 2   | Position  |
+--------------+--------------+-----------+
| 000002002000 | 000000002000 |         6 |
| 000002102000 | 000002002000 |         7 |
| 000002112000 | 000002102000 |         8 |
| 000002112020 | 000002112000 |        11 |
| 000002112120 | 000002112020 |        10 |
+--------------+--------------+-----------+
Run Code Online (Sandbox Code Playgroud)

Nic*_*Cox 5

gen Position = . 

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

评论在这里可能是多余的,但不会伤害任何人.

如果没有内置函数来执行此操作,则需要使用现有命令和函数编写一些代码.将a初始化Position为缺失(零可以作为替代).然后循环遍历字符,这里是1到12,因为该示例显示了12个字符串.我们记录第一个字符差异的位置.请注意条件missing(Position)(Position == .如果您愿意)如何限制对第一个差异的更改.

Stata在这里的所有观察中自动循环,因此所需的唯一循环是字符串位置.