是否可以使用此字符串中的数字:
'xx8xx'
将数字替换为8个空格以获取此字符串:
'xx xx'
我可以识别xx之间的数字,但替换语法不能按预期工作:
PRXCHANGE(s/xx([\d]*)xx/' ' x $1/io, -1, 'xx8xx')
有没有办法用$ 1中的数字来重复该数字的空格字符,比如'x $ 1?
任何帮助非常感谢! Tiaan
答案 0 :(得分:0)
假设您需要更换三个空白。
data _null_;
x=prxchange('s/(xx)\d+(xx)/$1 $2/', -1, 'xx8xx');
_x=prxchange('s/(?=\w+)(\d+)/ /',1,'xx8xx');
put _all_;
run;
修改强> 我错过了重要的信息。可以使用Tranwrd和repeat来获得它。
data _null_;
x=tranwrd('xx8xx', prxchange('s/.*(\d+).*/$1/',1,'xx8xx'), repeat(' ',prxchange('s/.*(\d+).*/$1/',1,'xx8xx')));
put _all_;
run;
答案 1 :(得分:0)
您需要先提取,然后编译一个新的正则表达式。这将是昂贵的,因为你必须每行编译一次。
data have;
input xstr $;
datalines;
xx8xx
xx3xx
xx4xx
;;;;
run;
data want;
set have;
rx1 = prxparse('/xx([\d])*xx/io');
rc1 = prxmatch(Rx1,xstr);
num_x = prxposn(rx1,1,xstr);
rx2 = prxparse(cat('s/(xx)[\d]*(xx)/$1',repeat(" ",num_x-1),'$2/i'));
newstr = prxchange(rx2,-1,xstr);
run;