1. ホーム
  2. string

[解決済み] strposではなく、単語が見つかったときのStataフラグ

2022-02-18 04:52:02

質問

文字列のデータがあり、単語が見つかったときにフラグを立てたいのですが、どうすればいいですか?単語とは、文字列の先頭、末尾、またはスペースで区切られた部分と定義します。 strpos は文字列が存在するときはいつでも検索しますが、私は次のようなものを探しています。 subinword . Stata は、以下の機能を使用する方法がありますか? subinword を置き換えることなく、その代わりにフラグを立てるのでしょうか?

clear 
input id str50 strings
1 "the thin th man"
2  "this old then"
3 "th to moon"
4 "moon blank th"
end

gen th_pos = 0
replace th = 1 if strpos(strings, "th") >0

この上記のコードは、すべてのオブザベーションが "th" を含むのでフラグを立てますが、私の望む出力は以下の通りです。

ID      strings          th_sub
1   "the thin th man"      1
2   "this old then"        0
3   "th to moon"           1
4   "moon blank th"        1

解決方法は?

ちょっとしたコツは "th" ただし、文字列の先頭または末尾に出現した場合は例外です。例外は

gen wanted = strpos(" " + strings + " ", " th ") > 0  

はそれらを回避することができます。それ以外の場合は、豊富な正規表現関数を使用することができます。

上の例では、思い通りにならないコードが1行に凝縮されるフラグを立てています。

gen th_pos = strpos(strings, "th") > 0

より直接的な答えは、何も置き換える必要はない、ということです。ただ、置き換えたらどうなるかをStataに教えてもらえばいいのです。

gen WANTED = strings != subinword(strings, "th", "", .)

部分文字列が存在する場合にそれを削除すると文字列が変化する場合は、それが存在しなければならない。