SSブログ

IBM SPSS Modeler(旧Clementine)関数 "issubstring" の落とし穴 [データサイエンス、統計モデル]

IBM SPSS Modeler(旧Clementine)の関数に
・issubstring(SUBDTRING, STRING)
・issubstring(SUBDTRING, N, STRING)
があります。

使い方として、文字列の中にあるキーワードが入っているかどうか?の調査に使います。

・issubstring(SUBDTRING, STRING)の使い方
issubstring(SUBDTRING, STRING)
STRINGにSUBSTRINGがあるかどうかを検索します。見つかった場合、その開始位置の添え字を返します。それ以外の場合は、0を返します。


例として、流入キーワードの中に "BCD" が含まれているかどうか?をチェックしたい。
issubstring("BCD", 流入キーワード)


大文字と小文字を区別するので、ABCDEFがヒットします。


そして、BCDは、2文字目からスタートするので、2となります。
それ以外は、0です。

条件抽出でそのキーワードが含まれているかどうか引っ張ってくる場合、
 issubstring("BCD", 流入キーワード) > 0
と書いても良いですし、> 0 を書かなくて、
 issubstring("BCD", 流入キーワード)
と書いても大丈夫です。

・issubstring(SUBDTRING, N, STRING)の使い方
issubstring(SUBDTRING, N, STRING)
STRINGのN番目の文字からSUBSTRINGの検索を開始します。見つかった場合、その開始位置の添え字を返します。


例として、流入キーワードの中に "BC*D" が含まれているかどうか?をチェックしたい。
です。
BCとDの間に文字列があってもなかっても良いです。



issubstring("D", issubstring("BC", 流入キーワード), 流入キーワード)

この書き方は実はあまりよろしくないです。

"BC*D"が含まれている場合は、その開始位置を返してくれます。
"BC"だけの場合は、0を返してくれます。
"BC"がない場合、、、issubstring("D", 0, 流入キーワード) となるので、これは、nullになります。

含まれていないなら0でもnullでもいいじゃないかってことなんですが、
条件抽出をする場合に、変なことが起こります。

【BCD > 0】を含める場合、


【BCD > 0】を破棄する場合、


となって、nullがどちらにも出てきません。

この問題を解決する方法としては、
issubstring("D", issubstring("BC", 流入キーワード) + 1, 流入キーワード)
と、"+ 1"を追記してあげれば、OKです。

結果は、

このように、文字列が含まれる場合は、開始位置を返し、含まれない場合は、0を返してくれます。

nice!(36)  コメント(2)  トラックバック(0) 
共通テーマ:学問