我试图在SAS SQL语句中使用正则表达式,但无法使它们正常工作。它运行,但它不返回匹配的表达式(列xx始终为空)。不确定这是我做错了还是SAS不允许你这样做。
proc sql noprint;
create table xx as
select *,
prxposn(prxparse("/a/i"), 0, name) as xx
from sashelp.class
;
quit;
由于 罗布
编辑:我知道我可以执行PROC SQL,然后在datastep中执行正则表达式 - 我可以正常工作,我只想知道是否可以在PROC sql中完成所有操作。答案 0 :(得分:4)
我不认为documentation在这个问题上特别清楚,但是“PRXPOSN函数使用PRXMATCH,PRXSUBSTR,PRXCHANGE或PRXNEXT的结果来返回捕获缓冲区”,所以你必须调用其中一个函数首先使用通过PRXPARSE生成的正则表达式ID,然后再调用PRXPOSN。
以下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 :(得分:1)
这可能与您想要的不同,但这会在xx
中填充name
中第一个 a 的位置:
proc sql noprint;
create table xx as
select *,
prxmatch('/a/i', name) as xx
from sashelp.class
;
quit;