シベリア鉄道旅行記 更新中です。

SASで正規表現

SASではPerl方言の正規表現が実装されている。
("/"で括って最後にi,m,xなど修飾子)
Perl RegularExpressionsで、PRXで始まる関数名が付けられている。

関数

 同じ正規表現で繰り返し処理する時は一度コンパイルしたほうが処理が早い。
 他の検索や置換をする関数では、引数に正規表現正規表現IDも使える。

 置換や検索後の処理をする場合はまずこちらでチェック。

  • PRXPOSN(正規表現orID, 対象グループ番号 ,対象文字列):括弧によるグループ化した文字列を返す。

 検索した文字列に対する処理に使える。

サンプル

今日使ったのはこんな感じ。
RTFの比較用にごにょごにょしてました。
SASはてなシンタックスハイライトに対応されてないのつらい

* hogehogeには変数textがあっていろいろ文字列が入っているとする。;
data hogehoge;
  retain re;
  if _n_ = 1 then do;
    re = PRXPARSE("/(?<=\{)(.+)(?=\\cells)/") ;
  end;
  if PRXMATCH(re, text) then do;
    target_text = PRXPOSN(re, 1, text);
  end;
  keep text, target_text;
run;

正規表現を自分なりに噛み砕いてみる

  • (?<=\{):戻り読み一致。その前の文字列が"{"である箇所。

    "\"をつけるのは、"{"が正規表現で意味のある文字(メタ文字)のため、"{"そのものとして認識させるための記号。

  • (.+):文字が1つ以上続いている文字列。

   あとでPRXPOSNで処理する用に"()"でグループ化している。

  • (?=\\cells):先読み一致。その後の文字列が"\cells"である箇所。

    "\"をつけるのは、さっきと同様。

参考

いろいろ書いたけどこちらのページがまとまっていておすすめです。
正規表現 - CatTail Wiki*
http://wikiwiki.jp/cattail/?%C0%B5%B5%AC%C9%BD%B8%BD

FORMATプロシジャ内で使えるらしい!
パターンマッチには正規表現が最適。
SAS忘備録 - FORMATプロシジャで正規表現を使う。
http://sas-boubi.blogspot.jp/2014/02/format_25.html

正規表現詳しく知りたい人にはO'REILLYの詳説正規表現をおすすめします。

詳説 正規表現 第3版

詳説 正規表現 第3版