0
変数はt14-1-1、t14-1-1A、t14-2-1-1、t14-2-4-15A、以下のカード明細書に記載されているように。文字列内の任意の1桁をSASの先行0に置き換えます。
私が必要とするのは、sas形式のz2で行うように、先頭の0の文字列の任意の1桁を埋め込むことです。私は必要なもの
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
私は配列とスキャン、長さとtranward機能でこれを行う方法を知っています。私はこれがprxchange(正規表現)によって複雑さの少ないいくつかのステップで実行できるかどうか疑問に思っていました。
私は運と運命の異なる順列と組み合わせで多くを試しました。
アドバンスのおかげでよろしく!
うん後に数字を持っていないことを確認してください否定先読みです。 'want02 = prxchange( 's /(?<= - )(\ d)(?!\ d)/ 0 $ 1 /'、-1、strip(have)); – Joe
@Toto、ありがとうございました!これは魅力のように機能します。 –
@Joe、確認もありがとう! :) –