2011-12-08 37 views
3

SAS SQL文で正規表現を使用しようとしていて、動作させることができませんでした。実行されますが、一致した式は返されません(列xxは常に空白です)。これが私が間違っていることであるかSASがあなたにこれをさせないかどうかはわかりません。SAS Proc SQL文でPerl正規表現を使用する

proc sql noprint; 
    create table xx as 
    select *, 
     prxposn(prxparse("https://stackoverflow.com/a/i"), 0, name) as xx 
    from sashelp.class 
    ; 
quit; 

おかげ ロブ

編集:私は、私はちょうどPROC SQLを行い、その後、datastepで正規表現を行うことができます知っている - 私は正常に動作し、私はちょうどそれが可能かどうかを知りたいことを得ることができますそれをPROC SQLですべて実行します。

答えて

3

私はdocumentationが問題に特に明らかであるとは思いません"PRXPOSN関数はPRXMATCH、PRXSUBSTR、PRXCHANGE、またはPRXNEXTの結果を使用してキャプチャバッファを返す"ので、PRXPARSEを呼び出す前にPRXPARSEで生成した正規表現IDを使用してこれらの関数のうちの1つを最初に呼び出す必要があります。

次のSASコードは、9.1.3で私に役立ちます。あなたの意図は、私には全く明らかではないが、私はあなたが最初の「A」から始まるサフィックスをキャプチャしたいと仮定しています、と私はそれに応じて正規表現を修正:このアプローチに

proc sql; 
    create table xx as 
    select *, 
     prxparse("/a\w*/i") as re, 
     ifc(
     prxmatch(calculated re, name), 
     prxposn(calculated re, 0, name), 
     " " 
    ) as xx 
    from sashelp.class; 
quit; 

一つの欠点(エレガンスが欠けていることに加えて)、出力データセットに追加の変数(re)が追加されています。次のソースはPRXPOSNの行動を追跡して私に有用だった:

1

これはあなたが望むものとは異なる場合がありますが、これはnameで最初の場所でxxを移入します:

proc sql noprint; 
    create table xx as 
    select *, 
     prxmatch('/a/i', name) as xx 
    from sashelp.class 
    ; 
quit; 
+0

うん、私の問題は、私が使用する必要がある正規表現が返されるということです様々な長さの紐。だからどこで始まるか知るだけでは不十分です。しかし、ありがとう... –

+0

あなたの構文がうまくいかない理由はわかりません。 'prxposn'が' proc sql'で動作するなら、私はドキュメントに何らかのエビデンスを見ません。おそらく、あなたの本当の問題についてもう少し詳しく話すことができ、別の解決策が現れます。 – itzy