Использование регулярных выражений Perl в инструкциях SAS Proc SQL - PullRequest
3 голосов
/ 09 декабря 2011

Я пытался использовать регулярные выражения в инструкции 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, а затем выполнить регулярное выражение в шаге данных - я могу получить это работает нормально, я просто хочу знать, возможно ли сделать все это в PROC SQL.

Ответы [ 2 ]

3 голосов
/ 13 декабря 2011

Я не думаю, что документация особенно ясна по этому вопросу, но «функция PRXPOSN использует результаты PRXMATCH, PRXSUBSTR, PRXCHANGE или PRXNEXT для возврата буфера захвата», и поэтому чтобы сначала вызвать одну из этих функций, используя идентификатор регулярного выражения, сгенерированный вами через PRXPARSE, перед вызовом PRXPOSN.

Следующий код SAS работает для меня на 9.1.3. Ваше намерение не совсем понятно для меня, но я предполагаю, что вы хотите захватить суффикс, начиная с первого «а», и поэтому я изменил ваше регулярное выражение соответствующим образом:

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 голос
/ 09 декабря 2011

Это может отличаться от того, что вы хотите, но это заполнит xx местоположением первых a в name:

proc sql noprint;
  create table xx as
  select *,
         prxmatch('/a/i', name) as xx
  from sashelp.class
  ;
quit;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...