Replace SAS:替换字符串中不同数量的前导连续符号

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一起

在SAS中,我的数据集中有一个字母数字ID变量,其值由12个符号组成

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,但它实际上解决了前导零数量变化的初始问题。根据你的建议,我添加了一个可能的解决方案。非常感谢。