前のページ|次のページ

PRXPOSN関数

キャプチャバッファの値が含まれる文字列を返します。

カテゴリ: 文字列マッチング
制限事項: PRXPARSE関数とともに使用します。
このルーチンに必要なPRXPARSE関数にDBCSとの互換性がないため、DBCSおよびMBCSデータの処理にこの関数を使用しないでください。

構文

必須引数

regular-expression-id

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

capture-buffer

値を取得するキャプチャバッファを識別する数値定数、変数または式です。

  • capture-bufferの値が0の場合、PRXPOSNは一致全体を返します。
  • capture-bufferの値が1から正規表現の開始かっこ数までの間の場合、PRXPOSNはそのキャプチャバッファの値を返します。
  • capture-bufferの値が開始かっこの数よりも大きい場合、PRXPOSNは欠損値を返します。

source

キャプチャバッファを抽出するテキストを指定します。

詳細

PRXPOSN関数は、PRXMATCH、PRXSUBSTR、PRXCHANGE、PRXNEXTのいずれかの結果を使用してキャプチャバッファを返します。PRXPOSNが有益な情報を返すには、これらの関数のいずれかで一致が見つかる必要があります。
キャプチャバッファは一致の一部としてかっこで囲まれ、正規表現で指定されます。この関数ではCALL PRXPOSNのようにSUBSTRを呼び出す必要がなく、キャプチャバッファのテキストが直接返されるため、キャプチャバッファの使用が簡素化されます。
パターンマッチングの詳細については、Perl正規表現(PRX)を使用したパターンマッチング を参照してください。

比較

PRXPOSN関数はCALL PRXPOSNルーチンと似ていますが、PRXPOSN関数はキャプチャバッファの位置と長さではなくキャプチャバッファ自体を返す点が異なります。
Perl正規表現(PRX)の関数とCALLルーチンは、連携してパターンと一致する文字列を操作します。これらの関数およびCALLルーチンのリストと概要説明については、カテゴリ別のSAS関数とCALLルーチンの文字列マッチングカテゴリを参照してください。

例1: 姓と名の抽出

次の例では、PRXPOSNを使用してデータセットから姓と名を抽出します。
data ReversedNames;
   input name & $32.;
   datalines;
Jones, Fred
Kavich, Kate
Turley, Ron
Dulix, Yolanda
;
data FirstLastNames;
   length first last $ 16;
   keep first last;
   retain re;
   if _N_=1 then
      re=prxparse('/(\w+), (\w+)/');
   set ReversedNames;
   if prxmatch(re, name) then 
      do;
         last=prxposn(re, 1, name);
         first=prxposn(re, 2, name);
      end;
run;
proc print data=FirstLastNames;
run;
PRXPOSNからの出力:姓と名
PRXPOSNからの出力:姓と名

例2: 一部の名前が無効な場合の名前の抽出

次の例では、名前のリストを含むデータセットを作成します。名のみまたは姓のみを含むオブザベーションは無効です。PRXPOSNはデータセットから有効な名前を抽出し、その名前をデータセットNEWに書き込みます。
data old;
   input name $60.;
   datalines;
Judith S Reaveley
Ralph F. Morgan
Jess Ennis
Carol Echols
Kelly Hansen Huff
Judith
Nick
Jones
;
data new;
   length first middle last $ 40;
   keep first middle last;
   re=prxparse('/(\S+)\s+([^\s]+\s+)?(\S+)/o');
   set old;
   if prxmatch(re, name) then
      do;
         first=prxposn(re, 1, name);
         middle=prxposn(re, 2, name);
         last=prxposn(re, 3, name);
         output;
      end;
run;
proc print data=new;
run;
有効な名前の出力
有効な名前の出力

関連項目:

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