![](/img/trans.png)
[英]SAS Enterprise Guide proc sql - using when statements inclusively
[英]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.