我有两个字符串变量,每个观察一个字符不同.我需要得到那个不同角色的位置.我试图使用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)
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在这里的所有观察中自动循环,因此所需的唯一循环是字符串位置.