私は次のことを理解しようとしています:idnum3、idnum897、idnum2342345などの異なる長さの文字変数を持つSASデータセット 'ids'があります。同じ長さの各IDを作成し、先頭を追加する必要があります'000000idnum3'、 '0000idnum897'、idnum2342345のような落ち着きのあるゼロ。多くのオプションを試しましたが、何も機能しないようです。提案をお願いします。ありがとうございます。
ここでは、2つの一般的なアプローチが役立ちます。
まず、フィールドが完全に数値の場合は、_Zw.d
_形式を使用します。
_idnum=put(input(idnum,8.),z8.);
_
完全に数値でない場合は、repeat()
を使用してゼロを生成します。 length()
を使用して、必要な数を見つけます。 Repeat
は、繰り返される文字と、元の文字に追加する繰り返しの数の2つの引数を取ります。その数は、直感的な数より1つ少なくなります:repeat('0',3)
= _0000
_。
そう:
_ if length(idnum) lt 8 then idnum = cats(repeat('0',8-1-length(idnum)),idnum);
_
ID番号変数が完全なIDに適合するのに十分な長さであることも確認してください。そうしないと、これは機能しません。
より長い例:
_data have;
input idnum $8.;
datalines;
idn2
idn234
idn23456
;;;;
run;
data want;
set have;
if length(idnum) lt 8 then idnum = cats(repeat('0',8-1-length(idnum)),idnum);
run;
_
私は毎日この問題を抱えています。 Znのフォーマット。あなたが必要なものをあなたに与えるべきです。たとえば、個人の社会保障番号が000012345
であるSSN(文字番号)があるとします。これをExcelまたはテキストファイルから読み込むと、12345
になってしまう可能性があります。 Zn.
の形式を使用して、先行ゼロを作成できます-
Data Want;
Set Have;
SSN = PUT(VALUE,Z9.);
RUN;
より直感的な場合は、適切な関数と組み合わせてtranslateを使用することもできます。フィールドの値を右揃えにして、作成されたスペースをゼロに置き換えるという考え方です。
data have;
input id $16.;
datalines;
idnum3
idnum897
idnum2342345
;
run;
data want;
set have;
want = translate(right(id), "0", " ");
run;