sas, удалите запятую и точку, регулярное выражение - PullRequest
0 голосов
/ 15 октября 2018

Ребята, вы знаете, как заменить удаление запятой и точки на что-то вроде этого:

'18430109646000104331929350001,064380958490001,974317618110001,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,. '

Мне пришлось объединить, чтобы получить список номеров претензий (с ведущими нулями).Теперь у меня есть эта строка, но я хочу удалить все вещи в конце.Я попробовал это, но это не сработало

data OUT.REQ_1_4_25 ;
   set OUT.REQ_1_4_24;
   CONCAT1=PRXCHANGE('s/,.//',1,CONCAT);
run; 

Кстати, я использую SAS и регулярные выражения, что-то вроде prxchange.

Ответы [ 3 ]

0 голосов
/ 15 октября 2018

Второй аргумент функции PRXCHANGE указывает, сколько раз необходимо выполнить поиск и замену.Замена 1 на -1 запустит замену до конца строки, а не только один раз.

Также пара ',.'заменит запятую, за которой следует любой символ ('.' - подстановочный знак).Вы хотите поймать запятую (',') или точку ('.'), Последний из которых является метасимволом, от которого вам нужно выйти, используя '\':

CONCAT1=PRXCHANGE('s/[,\.]//',-1,CONCAT);

Если вынужно только удалить пары запятых-периодов, затем убрать квадратные скобки:

CONCAT1=PRXCHANGE('s/,\.//',-1,CONCAT);
0 голосов
/ 15 октября 2018

Это также сработало для меня

    data OUT.REQ_1_4_25 ;
   set OUT.REQ_1_4_24;
   CONCAT1=TRANWRD(CONCAT, ',.', ''); 

run;
0 голосов
/ 15 октября 2018

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

Просто используйте функцию scan() и скажите, чтобы в качестве разделителей использовались . и ,:

data claims;
  length claim $50;
  list = '18430109646000104331929350001,064380958490001,974317618110001,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.';
  cnt=1;
  claim=scan(list,cnt,'.,');
  do while (claim ne '');
    output;
    cnt=cnt+1;
    claim=scan(list,cnt,'.,');
  end;
  keep claim;
run;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...