我正在尝试从sas的var中删除字符串。
Data test;
a='27,7,37';
b=7;
c=trnwrd(a,strip(put(b,2.)),'');
run;
我只想从字符串a中除去第二个7,而不是从27,37中除去7。 我该如何实现? 谢谢
答案 0 :(得分:0)
使用tranwrd
代替transtrn
,将第三个参数(替换)用作trimN('')
返回的零长度字符串
c = transtrn ( a, cats(',',b), trimN(''));
翻译可能会“太强大”。例如,如果a="1,7,7,7,727";
transtrn
将消除所有 ,7
次出现。
使用PRXCHANGE
Data test;
array s [10] $100 _temporary_ (
'27,7,37'
, '27,7,7,7,7,7,737'
, '27,7' %* <------ prxchange does not remove ,7 -- PCRE should! bug in SAS ? ;
, '27,77'
, ',7,4,5,6'
, ',7,7,7,7'
);
b = 7;
length patternTemplate $50;
patternTemplate = 's/^([^,]*),(#b#)($|,)/$1$3/';
pattern = tranwrd (patternTemplate, '#b#', cats(b));
put /pattern=/;
do i = 1 to dim(s) while (not missing(s[i]));
a = s[i];
c = prxchange(pattern,1,a);
put a=/c=/;
output
end;
run;
答案 1 :(得分:0)
您可以按以下方式使用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;