2016-12-22 27 views
0

私はこのような非常に厄介に見える患者の処方箋を示すテキスト変数があります:私はすべてのこれらの値に目を通していないが、いくつかのパターンが発生する可能性がありStataで混乱した文字列変数のコンポーネントを抽出するには?


PatientRx 

ACETAZOLAMIDE  250MG TABLET- 100 
ADAPALENE + BENZOYL 0.1% + 2.5% GEL-..  
ADRENALINE/EPIPEN 300MCG/0.3ML INJ.. 
ALENDRONATE + COLECA 70MG + 140MCG TA..  
ALLOPURINOL   100MG TABLET- 100 
ALUM HYDROX + MAG HY 250+120+120MG/5M.. 
AMILORIDE + HYDROCHL 5MG + 50MG HCL T.. 

を:

  • 多くの場合、複数の薬剤があり、それらは例えばスペースおよびスラッシュで区切られています。
  • 薬もプラス記号で区切られます。しかしプラス記号は投与量の間にも使用されます。
  • スペースに関するルールは、入力の開始時と終了時の両方で非常に恣意的です。

どのようにして薬剤の名前だけを新しい変数に抽出できますか?新しい変数は次のようになります。

Newvar1   Newvar2 
ACETAZOLAMIDE 
ADAPALENE   BENZOYL 
ADRENALINE  EPIPEN 
ALENDRONATE  COLECA 

などとなります。

答えて

1

完全に問題が発生する可能性がある正規表現の場合、最初に到達するものがあります。さらに、ssc install mossによってインストールされたmossの注記。

しかし、最初の数字の0から9までの位置を探してから、前に行ったことを解析するために、この例の情報を参考にすれば最も簡単に思えます。私は薬物名に数字が含まれているかどうかはわかりません。

clear 
input str40 sandbox 
" ACETAZOLAMIDE  250MG TABLET- 100" 
"ADAPALENE + BENZOYL 0.1% + 2.5% GEL-"  
" ADRENALINE/EPIPEN 300MCG/0.3ML INJ" 
"ALENDRONATE + COLECA 70MG + 140MCG TA"  
" ALLOPURINOL   100MG TABLET- 100" 
"ALUM HYDROX + MAG HY 250+120+120MG/5M" 
" AMILORIDE + HYDROCHL 5MG + 50MG HCL T" 
end 

gen wherenum = . 
quietly forval j = 0/9 { 
    replace wherenum = min(wherenum, strpos(sandbox, "`j'")) if strpos(sandbox, "`j'") 
} 
gen drug = substr(sandbox, 1, wherenum - 1) 

split drug, parse(+ /) 

l drug?, sep(0) 

    +---------------------------+ 
    |   drug1  drug2 | 
    |---------------------------| 
    1. | ACETAZOLAMIDE    | 
    2. | ADAPALENE  BENZOYL | 
    3. | ADRENALINE  EPIPEN | 
    4. | ALENDRONATE  COLECA | 
    5. | ALLOPURINOL    | 
    6. | ALUM HYDROX  MAG HY | 
    7. | AMILORIDE  HYDROCHL | 
    +---------------------------+ 
関連する問題