如何在SAS中的字符字段中添加前导零?

Mar*_*sas 5 sas

我试图找出以下内容:我有SAS数据集'ids',其字符变量具有不同的长度,如idnum3,idnum897或idnum2342345.需要创建具有相同长度的每个ID并添加前导零以使其像'000000idnum3','0000idnum897',idnum2342345一样.我尝试了很多选项,但似乎没什么用.请给我任何建议.谢谢!

Joe*_*Joe 5

这里有两种通用方法.

首先,如果字段完全是数字,则使用该Zw.d格式.

idnum=put(input(idnum,8.),z8.);
Run Code Online (Sandbox Code Playgroud)

如果它不是完全数字,那么您使用repeat()生成零.使用length()找出你需要多少. Repeat有两个参数 - 要重复的字符,以及要添加到原始字符的重复次数.这个数字将比直观数字少一个:repeat('0',3)= 0000.

所以:

  if length(idnum) lt 8 then idnum = cats(repeat('0',8-1-length(idnum)),idnum);
Run Code Online (Sandbox Code Playgroud)

确保您的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;
Run Code Online (Sandbox Code Playgroud)


小智 3

我每天都会遇到这个问题。Zn 的形式 应该给你你需要的东西。例如,假设您有 SSN(字符编号),其中某个人的社交身份为000012345。如果您从 Excel 或文本文件中读取此内容,您最终可能会得到12345. 您可以使用以下格式Zn.来创建前导零 -

Data Want;
Set Have;
SSN = PUT(VALUE,Z9.);
RUN;
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,但这是一个字符变量,字母和数字的混合。Z 格式给出错误“格式 $Z 未找到或无法加载”。 (2认同)