%SYSFUNC関数とPUTN関数を組み合わせることで、数値やマクロ変数値に前ゼロ(ゼロパディング)を付与することができます。
目次
数値に前ゼロを付与する例
以下は、数値1に前ゼロを付与する例です。
%put %sysfunc(putn(1, z2.));
%put %sysfunc(putn(1, z3.));
%put %sysfunc(putn(1, z4.));
%put %sysfunc(putn(1, z5.));
以下は、ログへの出力結果です。
01 001 0001 00001
%IFステートメントを使用する例(おススメしない)
ループインデックス変数に前ゼロを付与する方法として、%IFステートメントを使用する方法があり、たまに見かけることがあります。
%macro zero_padding_not_good;
%local i;
%do i = 1 %to 10;
%if &i. < 10 %then %put 0&i.;
%else %put &i.;
%end;
%mend zero_padding_not_good;
%zero_padding_not_good;
以下は、ログへの出力結果です。
01 02 03 04 05 06 07 08 09 10
条件分岐で前ゼロの有無を判定しているのですが、スマートさを感じられず、個人的にあまり好きになれないやり方です・・・。
これでは、前ゼロを3つ、4つと増やしたい場合に柔軟に対応できません。
%SYSFUNCとPUTNを組み合わせる例(おススメ)
以下は、おススメしている%SYSFUNC関数とPUTN関数を組み合わせた例です。
%macro zero_padding(digit);
%local i;
%do i = 1 %to 5;
%put %sysfunc(putn(&i., z&digit..));
%end;
%mend zero_padding;
%zero_padding(2);
%zero_padding(3);
%zero_padding(4);
上記のコード実行すると、以下のような出力結果になります。
01 02 03 04 05 001 002 003 004 005 0001 0002 0003 0004 0005
引数digitを任意に指定して展開するだけで、桁数を自在に変更することができます。
もし、もっとスマートなやり方があるという方は、お教え頂けるとありがたいです。