2017-01-13 17 views
1

У меня есть длинная символьная переменная (до 12 000 символов), и я хотел бы найти строку внутри переменной, которая звучит как определенное слово.
Я также хотел бы создать переменную, которая равна единице, если строка находится в переменной. Скажем, ради аргумента, слово, которое я пытаюсь найти, это «Мэри» (не чувствительный к регистру). Вот четыре образца строки в переменной называется «строка» в наборе данных под названием «вопрос»:Как помечать, если слово звучит как любое слово в поле символов, используя SOUNDEX?

  • Мэри был барашек его шерсть была белой, как снег
  • Джек быть ловким Джек быть быстрым Джек перепрыгнуть подсвечник
  • Я думаю, вы и я должен жениться друг с другом
  • Я на самом деле не хочу, чтобы выйти замуж

переменная флаг должен = 1 для строк 1 и 3 (потому что Мэри и выйти замуж).

К сожалению, я не думаю, что я могу использовать этот код:

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

Это не работает, потому что SAS пытается найти код Soundex для «Мэри» в строке (не фактические строки "Мэри"). Любые мысли о том, как обойти это?

ответ

0

Вот один из способов. Петли через каждое слово и вычисляют звуковой сигнал для этого слова. Если soundex соответствует, он выходит из цикла, для эффективности.

data test_set; 
    infile datalines dsd; 
    length string $100; 
    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 $100; 

    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