繁体   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