Replace SAS:替换字符串中不同数量的前导连续符号
在SAS中,我的数据集中有一个字母数字ID变量,其值由12个符号组成Replace SAS:替换字符串中不同数量的前导连续符号,replace,sas,substring,Replace,Sas,Substring,在SAS中,我的数据集中有一个字母数字ID变量,其值由12个符号组成 DATA new; input id $12.; datalines; 00007047611B 00649252842B 00837530027V 00000004627K ; RUN; 我只想用下划线替换前导零,以获得以下格式: ____7047611B __649252842B __837530027V _______4627K 我已经尝试过将substr与tranwrd或translate一起
DATA new;
input id $12.;
datalines;
00007047611B
00649252842B
00837530027V
00000004627K
;
RUN;
我只想用下划线替换前导零,以获得以下格式:
____7047611B
__649252842B
__837530027V
_______4627K
我已经尝试过将substr与tranwrd或translate一起使用,但是前导零的数量变化证明是有问题的
根据Tom的建议,可能的解决方案:
DATA new;
input id $12.;
datalines;
00007047611B
00649252842B
00837530027V
00000004627K
;
RUN;
DATA new;
set new;
pos = verify(id, "0");
id = cats(repeat('_', pos - 2), substr(id, pos));
RUN;
这里有一条路
data have;
input id $ 12.;
datalines;
00007047611B
00649252842B
00837530027V
00000004627K
;
data want (keep=id);
set have;
rid = prxparse("/^(0*)/");
m = prxmatch(rid, id);
call prxposn(rid, 1, pos, len);
id = cats(repeat('_', len-1), substr(id, len+1));
run;
左边的SUBSTR就是一个很好的例子
65 data _null_;
66 input id :$12.;
67 put id=;
68 if id eq: '0' then substr(id,1,verify(id,'0')-1)='____________';
69 put id=;
70 cards;
id=00007047611B
id=____7047611B
id=00649252842B
id=__649252842B
id=00837530027V
id=__837530027V
id=00000004627K
id=_______4627K
id=90007047611B
id=90007047611B
id=04007047611B
id=_4007047611B
您是否尝试使用VERIFY来找出有多少前导零?不幸的是,我不知道VERIFY,但它实际上解决了前导零数量变化的初始问题。根据你的建议,我添加了一个可能的解决方案。非常感谢。