функция prxchange - PullRequest
       11

функция prxchange

0 голосов
/ 28 декабря 2018

У меня вопрос по функции prxchange.У меня есть переменная с буквенно-цифровыми символами, специальными символами и пробелами, и я хочу получить переменную без цифр и специальных символов, но не удалять пробелы

Я использую: UPCASE(prxchange(" s/[^A-Z]//i",-1,variable));, но я получаю значения без пробелов

  • Что у меня есть: PROVA DB2.? RACF2
  • Что я хочу: PROVA DB RACF
  • Что я получаю с помощью своей функции: PROVADBRACF

что я могу сделать?Спасибо Марина

Ответы [ 3 ]

0 голосов
/ 28 декабря 2018

Добавьте пробел к классу символов .Я поставил пробел после Z, хотя он также мог бы идти до A

UPCASE(prxchange("s/[^A-Z ]//i",-1,variable));

Краткое резюме по регулярным выражениям в SAS можно найти в Советы по регулярным выражениям Perl

Спецификатор класса отрицанных символов [^] перечисляет символы, которые нужно сохранить (или не сопоставить) во время операции подстановки.

[^A-Z]

означает, что не совпадают все, что не находится между буквами A - Z, что не включает символ пробела, поэтому пробелы удаляются.

выражение, которое вы написали для подстановки: удалить любую последовательность, которая не соответствует букве

0 голосов
/ 30 декабря 2018

В этом сценарии достаточно простой функции сжатия, как упомянуто @dork horsten

data test;
  variable="PROVA DB2.? RACF2";
  v2= compress(variable,'.?');
run;
0 голосов
/ 28 декабря 2018

Вы можете использовать:

UPCASE(prxchange(" s/[^A-Z\s\t]*//i",-1,variable));

\t - все вкладки \s - все пробелы

Код:

data l;
variable="PROVA DB2.? RACF2";
v2=UPCASE(prxchange(" s/[^\w\s\t]//i",-1,variable));
run;

Результат: PROVA DB RACF

...