簡體   English   中英

在SAS Proc SQL語句中使用Perl正則表達式

[英]Using Perl Regular Expressions in SAS Proc SQL statements

我試圖在SAS SQL語句中使用正則表達式,但無法使它們正常工作。 它運行,但它不返回匹配的表達式(列xx始終為空)。 不確定這是否是我做錯了或者SAS不允許你這樣做。

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

謝謝Rob

編輯:我知道我可以只執行PROC SQL然后在datastep中執行正則表達式 - 我可以正常工作,我只想知道是否可以在PROC sql中完成所有操作。

我不認為文檔在這個問題上特別清楚,但“PRXPOSN函數使用PRXMATCH,PRXSUBSTR,PRXCHANGE或PRXNEXT的結果返回捕獲緩沖區”,所以你必須先調用其中一個函數,在調用PRXPOSN之前,通過PRXPARSE生成的正則表達式ID。

以下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的行為:

這可能與您想要的不同,但這將使用name一個a的位置填充xx

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM