我有两个字符串变量,每个观察一个字符不同。我需要得到那个不同角色的位置。
我曾尝试使用indexnot()
函数,但由于两个字符串中的字符相同,因此会产生错误结果。
这是一个说明性的例子,变量position
是我想要的:
+--------------+--------------+-----------+
| String 1 | String 2 | Position |
+--------------+--------------+-----------+
| 000002002000 | 000000002000 | 6 |
| 000002102000 | 000002002000 | 7 |
| 000002112000 | 000002102000 | 8 |
| 000002112020 | 000002112000 | 11 |
| 000002112120 | 000002112020 | 10 |
+--------------+--------------+-----------+
答案 0 :(得分: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会自动循环遍历此处的所有观察,因此所需的唯一循环是字符串位置。