[英]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.