在SAS Proc SQL语句中使用Perl正则表达式

时间:2011-12-08 23:48:28

标签: sql regex sas

我试图在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中完成所有操作。

2 个答案:

答案 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;