2014年2月25日火曜日

FORMATプロシジャで正規表現を使う。



「SAS9.3」から、
FORMATプロシジャのINVALUEステートメント内で、正規表現が使えるようになりました。

ただしこの機能はシングルバイト文字でのみ使用したほうが良さそうです。
(現状、日本語などのマルチバイト文字に対応していないようなのと、こちら」で取り上げた問題により意図した結果にならない可能性があるため)
 


INVALUEはインフォーマットを作成するステートメントです。
正規表現は詳しくない、、ので詳細は割愛します。。




*** サンプルデータ作成 *****;
data DT1;
  input V1$;
cards;
ad
ca
fd
;

*** INVALUEステートメントに正規表現を使う例 *****;
* ① ***;
proc format;
  invalue MYFMT1_
    '/[abc]{2}/'  (regexp) = 1
    '/[def]{2}/'  (regexp) = 2
    other = 3
  ;
run;

* ② ***;
data DT2;
  set DT1;
  V2 = input(V1, MYFMT1_.);
run;

データセット「DT2」
V1  V2
ad   3
ca   1
fd    2




解説

①まず正規表現を含むINVALUEステートメントを定義します。
以下の両端を「/」で囲んでるやつが正規表現。また「(regexp)」と書くことで、正規表現ですよ、と宣言してます。

'/[abc]{2}/'  (regexp) = 1


上記は、「a,b,c」のいずれかの2文字で構成されてる値だったら「1と表示する」と定義してます。


②INPUT関数でインフォーマットを指定して数値変換します。



0 件のコメント:

コメントを投稿