2017-01-13 3 views
1

私は長い(12,000文字まで)長い文字変数を持っており、変数内で特定の単語のように聞こえる文字列を探したいと思います。
文字列が変数に含まれている場合は、1に等しい変数を作成したいと思います。議論のために、私が見つけようとしている言葉は「メアリー」(大文字小文字を区別しない)です。SOUNDEXを使用して、単語が文字フィールド内の任意の単語のように聞こえる場合は、フラグを立てる方法は?

  • オーバー迅速ジャックジャンプもメアリーはそのフリースは雪
  • として白色であった子羊を持っていたジャックは軽快ジャックこと:ここでは「質問」と呼ばれるデータセット内の「文字列」と呼ばれる変数の4つのサンプル文字列があります燭台
  • は、私がすべき=文字列1および3の1(マリアと結婚するので)私は実際に結婚

にフラグ変数を取得する必要はありません、あなたと私は

  • お互いに結婚するべきだと思います。

    残念ながら、私はこのコードを使用することができるとは思わない:

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

    SASは、文字列(ではない実際の文字列に「メアリー」のためのsoundexコードを見つけようとしているので、それは動作しません。 "メアリー")。どのようにこれを回避するための任意の考えですか?

  • 答えて

    0

    ここには1つの方法があります。各単語をループし、その単語のsoundexを計算します。 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

    関連する問題