使用PROC SQL查找SAS中给定字符串中最多一个字母的字符串

Har*_*Har 13 regex sql sas

首先是一些背景.我在SAS中使用proc sql,需要获取数据集中的所有条目(包含几百万个条目),其变量"Name"等于(比方说)"Massachusetts".当然,由于数据曾经由人类手动输入,因此接近所有可能出现的拼写错误("Amssachusetts","Kassachusetts"等).

我发现很少有条目错误地超过两个字符,所以代码

Name like "__ssachusetts" OR Name like "_a_sachusetts" OR ... OR Name like "Massachuset__"
Run Code Online (Sandbox Code Playgroud)

会选择我要找的条目.但是,我希望必须有一种更方便的方式来编写

Name that differs by at most 2 characters from "Massachusetts";
Run Code Online (Sandbox Code Playgroud)

在那儿?或者是否有其他策略来获取这些条目?我尝试搜索stackoverflow和网络但是不成功.我也是SQL和SAS的初学者.

一些额外的信息:数据库不是英文(实际的字符串不是"马萨诸塞州")所以使用SOUNDEX并不是真的可行(如果有的话).

提前致谢.

(编辑:改进标题)

cmj*_*hns 13

SAS具有内置函数COMPGEDCOMPLEV来计算字符串之间的距离.这是一个示例,显示如何选择Levenshtein编辑距离小于或等于2的那些.

data typo;
input name $20.;
datalines;
massachusetts
masachusets
mssachusetts
nassachusets
nassachussets
massachusett
;

proc sql;
  select name from typo
  where complev(name, "massachusetts") <= 2;
quit;
Run Code Online (Sandbox Code Playgroud)