前のページ|次のページ

PRXCHANGE関数

パターンマッチングの置換を実行します。

カテゴリ: 文字列マッチング
制限事項: regular-expression-id引数を使用する場合、この引数にはDBCS互換性がないPRXPARSE関数が必要なため、DBCSおよびMBCSデータは処理できません。

構文

必須引数

perl-regular-expression

Perl正規表現を値とする文字定数、変数または式を指定します。

regular-expression-id

PRXPARSE関数によって返されるパターン識別子の値が含まれる数値変数を指定します。

制限事項 この引数を使用する場合、PRXPARSE関数も使用する必要があります。

時間

一致を検索して一致するパターンを置換する回数を指定する数値の定数、変数または式です。

ヒント timesの値が–1の場合、sourceの末尾に到達するまで一致したパターンが置換され続けます。

source

検索する文字定数、変数または式を指定します。

詳細

基本

regular-expression-idを使用すると、PRXCHANGE関数はPRXPARSEから返されたregular-expression-idで変数sourceを検索します。source中の値は正規表現で指定された変更が加えられて返されます。一致がない場合、PRXCHANGEは未変更のsourceの値を返します。
perl-regular-expressionを使用すると、PRXCHANGEはperl-regular-expressionを使って変数sourceを検索します。PRXPARSEを呼び出す必要はありません。PRXCHANGEはWHERE句とPROC SQLの中のperl-regular-expressionで使用できます。
パターンマッチングの詳細については、 Perl正規表現(PRX)を使用したパターンマッチング を参照してください。

Perl正規表現のコンパイル

perl-regular-expressionが定数の場合、または/oオプションが指定されている場合、一度コンパイルされたPerl正規表現がPRXCHANGEの使用のたびに再利用されます。perl-regular-expressionが定数ではなく、/oオプションが指定されていない場合は、PRXCHANGEの呼び出しのたびにPerl正規表現が再コンパイルされます。
注: コンパイル1回のみの動作は、DATAステップ、WHERE句またはPROC SQLの中でPRXCHANGEを使用する場合に発生します。他のすべての使用では、PRXCHANGEを呼び出すたびにperl-regular-expressionが再コンパイルされます。

照合の実行

Perl正規表現は、メタ文字と呼ばれる文字と特殊文字で構成されます。照合を実行すると、SASはPerl正規表現で指定された部分文字列をソース文字列から検索します。
コードを記述するときに使用可能なPerl正規表現のメタ文字の簡易リストは、Perl正規表現(PRX)のメタ文字テーブルの表で確認できます。メタ文字の完全なリストについては、PerlのWebサイトを参照してください。

比較

PRXCHANGE関数は、CALL PRXCHANGEルーチンに似ています。異なるのは関数がパターンマッチングの置換値をそのパラメータの1つとしてではなく引数の戻り値として返す点です。
Perl正規表現(PRX)の関数とCALLルーチンは、連携してパターンと一致する文字列を操作します。これらの関数およびCALLルーチンのリストと概要説明については、カテゴリ別のSAS関数とCALLルーチンの文字列マッチングカテゴリを参照してください。

例1: DATAステップを使用して姓名の順序を入れ替える

DATAステップを使用して名と姓の順序を入れ替える例を次に示します。
   /* Create a data set that contains a list of names. */
data ReversedNames;
   input name & $32.;
   datalines;
Jones, Fred
Kavich, Kate
Turley, Ron
Dulix, Yolanda
;
   /* Reverse last and first names with a DATA step. */
data names;
   set ReversedNames;
   name=prxchange('s/(\w+), (\w+)/$2 $1/', -1, name);
run;
proc print data=names;
run;    
DATAステップからの結果
DATAステップからの結果

例2: PROC SQLを使用して姓名の順序を入れ替える

次の例では、PROC SQLを使用して名と姓の順序を入れ替えます。
data ReversedNames;
   input name & $32.;
   datalines;
Jones, Fred
Kavich, Kate
Turley, Ron
Dulix, Yolanda
;
proc sql;
   create table names as
   select prxchange('s/(\w+), (\w+)/$2 $1/', -1, name) as name
   from ReversedNames;
quit;
proc print data=names;
run;
PROC SQLからの結果
PROC SQLからの結果

例3: 同一の名前持つ行の一致

次の例では、2つのデータセットの名前を比較し、両方のデータセットに共通する名前を書き出します。
data names;
   input name & $32.;
   datalines;
Ron Turley
Judy Donnelly
Kate Kavich
Tully Sanchez
;
data ReversedNames;
   input name & $32.;
   datalines;
Jones, Fred
Kavich, Kate
Turley, Ron
Dulix, Yolanda
;
proc sql;
   create table NewNames as
   select a.name from names as a, ReversedNames as b
   where a.name=prxchange('s/(\w+), (\w+)/$2 $1/', -1, b.name);
quit;
proc print data=NewNames;
run;
同一の名前を持つ一致行からの結果
同一の名前を持つ一致行からの結果

例4: 小文字のテキストから大文字への変更

次の例では、\U、\Lおよび\Eのメタ文字を使用してテキストの文字列の大文字小文字を変更します。大文字小文字の変更はネストできません。この例では、\Eメタ文字はすべての大文字小文字変更を終了するてめ、“bear”は大文字に変更されません。
data _null_;
   length txt $32;
   txt=prxchange ('s/(big)(black)(bear)/\U$1\L$2\E$3/', 1, 'bigblackbear');
   put txt=;
run;
SASは次の出力をログに書き出します。
txt=BIGblackbear

例5: 一致するパターンの固定値への変更

この例では、変数中のパターンを検索し、事前に定義した値に変数を置換します。ここでは、DATAステップを使用して電話番号を検索して情報メッセージに置換します。
   /* Create data set that contains confidential information. */
data a;
   input text $80.;
   datalines;
The phone number for Ed is (801)443-9876 but not until tonight.
He can be reached at (910)998-8762 tomorrow for testing purposes.
;
run;
   /* Locate confidential phone numbers and replace them with message */
   /* indicating that they have been removed.                         */
data b;
   set a;
   text=prxchange('s/\([2-9]\d\d\) ?[2-9]\d\d-\d\d\d\d/*PHONE NUMBER 
      REMOVED*/', -1, text);
   put text=;
run;
proc print data=b; 
run;
一致するパターンから固定値への変更の結果
一致するパターンから固定値への変更の結果

関連項目:

前のページ|次のページ|ページの先頭へ