如何使用 SOUNDEX 标记一个单词是否听起来像字符字段中的任何单词?

How to flag if a word sounds like any word within a character field, using SOUNDEX?

我有一个很长的字符变量(最多 12,000 个字符),我想在该变量中找到一个听起来像某个词的字符串。
如果字符串在变量中,我还想创建一个等于 1 的变量。比方说,为了争论起见,我要查找的词是 "Mary"(不区分大小写)。以下是名为 "question":

的数据集中名为 "string" 的变量中的四个示例字符串

字符串 1 和 3 的标志变量应该 = 1(因为 Mary 和 marry)。

很遗憾,我认为我无法使用此代码:

DATA answer;
   SET question;
   IF FINDW(string, SOUNDEX("Mary")) ne 0 THEN flag=1;
     ELSE flag=0;
RUN;

它不起作用,因为 SAS 正在尝试在字符串(而不是实际字符串 "Mary")中查找 "Mary" 的 soundex 代码。关于如何解决这个问题有什么想法吗?

这是一种方法。遍历每个单词并计算该单词的 soundex 。如果 soundex 匹配,它会跳出循环,以提高效率。

data test_set;
    infile datalines dsd;
    length string 0;
    input string;
    datalines;
Mary had a little lamb its fleece was white as snow
Jack be nimble Jack be quick Jack jump over the candlestick
I think you and I should marry each other
I actually do not want to get married
;
run;

data test_set1(keep=string flag);
    set test_set;

    length i_word 0;

    flag = 0;

    mary_soundex = soundex("mary");

    word_count = countw(string);

    i = 1;

    do while (i le word_count and flag ne 1);
        i_word = scan(string, i);
        i_word_soundex = soundex(i_word);
        if mary_soundex eq i_word_soundex then flag = 1;
        i = i + 1;
    end;
run;

更多关于将句子分解成单词的信息: http://blogs.sas.com/content/iml/2016/07/11/break-sentence-into-words-sas.html