Regex 用SAS中的前导0替换字符串中的任何单个数字

Regex 用SAS中的前导0替换字符串中的任何单个数字,regex,sas,Regex,Sas,我有一个变量,其值为t14-1-1、t14-1-1A、t14-2-1-1、t14-2-4-15A等,如下面的cards语句所述 我需要的是用前导0填充字符串中的任何一个数字,就像我们使用sas格式z2所做的那样 data test01; input have $40.; want02=prxchange('s/(^|-)\d($|-)*/\10\2/',-1,strip(have)); want03=prxchange('s/(^|-)\d($|-)*(.+)/\10\

我有一个变量,其值为t14-1-1、t14-1-1A、t14-2-1-1、t14-2-4-15A等,如下面的cards语句所述

我需要的是用前导0填充字符串中的任何一个数字,就像我们使用sas格式z2所做的那样

data test01;
    input have $40.;

    want02=prxchange('s/(^|-)\d($|-)*/\10\2/',-1,strip(have));
    want03=prxchange('s/(^|-)\d($|-)*(.+)/\10\2/',-1,strip(have));

    cards;
    t14-1-1
    t14-1-1A
    t14-2-1-1
    t14-2-1-1A
    t14-2-4-15A
    t14-2-4-15B
    t14-2-4-16
    t14-2-4-17
    t14-2-4-17A
    t14-2-4-17B
    l16-2-9-1-1
    l16-2-9-2-1
    l16-2-9-2-2
    ;
run;
我需要的是:

t14-01-01
t14-01-01A
t14-02-01-01
t14-02-01-01A
t14-02-04-15A
t14-02-04-15B
t14-02-04-16
t14-02-04-17
t14-02-04-17A
t14-02-04-17B
l16-02-09-01-01
l16-02-09-02-01
l16-02-09-02-02
我知道我有办法用数组和扫描、长度和平移函数来实现这一点。我只是想知道这是否可以通过prxchange(正则表达式)以较少的复杂性在几个步骤中完成

我尝试了很多不同的排列和组合,但都没有成功


提前谢谢你的帮助

我不知道SAS regex Flavor是否支持LookAround,但是,如果它支持,这应该可以完成以下工作:


  • 搜索:
    (?我不知道SAS regex Flavor是否支持LookAround,但是,如果它支持LookAround,这应该可以完成以下工作:


    • 搜索:
      (?是的,他们有。
      want02=prxchange('s/(?@Joe,也谢谢你的确认!):)是的,他们有。
      want02=prxchange('s/(?@Joe,也谢谢你的确认!)