【SAS】正規表現の取り扱い

SASPerl仕様の正規表現を使ってみよう

SAS正規表現を使用したい場合はPRXの関数を使うことになります。
ただし、2バイト文字の取り扱いには非常に苦労しました。
SASはShift-JISとあまり相性が良くないと思います。
そのくせ、日本語版のSAS EGとかだとExcelから読み込むデータセット名がデフォルト2バイト文字になったりするんだけど、怖いから英語名に直しています)
正規表現 - CatTail Wiki*

PRX関数を使う前の前処理

やっておくと良い前処理は次の通り

  • TRIM関数とLEFT関数で前後の空白を除去
  • KCOMPRESS関数で中間の空白を除去
  • KTRANSLATE関数で全角英数を半角英数に置換
  • TRANWRD関数で全角から半角に置換しておきたい文字列を置換

住所で3桁以上の数字を検索するときはこんな感じ

DATA;
  ADD = '東京都品川区広町2丁目1-306';
  /** 前処理 **/
  ADD_WRD = TRANWRD(KTRANSLATE(KCOMPRESS(TRIM(LEFT(ADD)), "  "), "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"), "丁目", "-");
  /** 3桁以上の数字が含まれるか検索 **/
  ADD_NUM = PRXMATCH('/[0-9]{3,}/', ADD_WRD);
RUN;