Удалить конкретную строку из переменной char в sas - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь удалить строку из переменной в sas.

Data test;
a='27,7,37';
b=7;
c=trnwrd(a,strip(put(b,2.)),'');
run;

Я хочу удалить только вторую 7 из строки a, а не 7 из 27,37.Как мне этого добиться?Спасибо

Ответы [ 2 ]

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

Вы можете использовать prxchange следующим образом

data test;
length a $50.;
a='27,7,37';output;
a='7,7,7';output;
 a='7,97,7';output;
 a='44,7,57,78,79,66';output;
 run;

в приведенном ниже коде

    ^(\d+) indicates first starting number a
    (\,7)  -- indicates  second number 
     (.+) -- everything after second number

первая и последняя части захвачены, когда $ 1 и $ 3 заменены, что означает, что мы исключаем вторую 7если он не находит этот шаблон, он ничего не делает

 data want;
 set test;
 a1=prxchange('s/^(\d+)(\,7)(.+)/$1$3/',1, a);
 run;
0 голосов
/ 04 октября 2018

Вместо tranwrd используйте transtrn с 3-м аргументом (замена), представляющим собой строку нулевой длины, возвращаемую trimN('')

c = transtrn ( a, cats(',',b), trimN(''));

transtrn, может быть «слишком сильным».Например, если a="1,7,7,7,727";, то transtrn устранит все ,7 вхождений.

Более надежное сопоставление и замену можно выполнить с помощью PRXCHANGE

* 1016.*
...