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

时间:2016-05-23 18:39:50

标签: sas

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

3 个答案:

答案 0 :(得分:4)

这里有两种常用方法。

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

idnum=put(input(idnum,8.),z8.);

如果它不完全是数字,那么您使用repeat()生成零。使用length()了解您需要的数量。 Repeat有两个参数 - 要重复的字符,以及要添加到原始字符的重复次数。该数字将比直观数字少一个: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;

答案 1 :(得分:3)

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

Data Want;
Set Have;
SSN = PUT(VALUE,Z9.);
RUN;

答案 2 :(得分:2)

如果它更直观,您还可以将translate与正确的功能结合使用。我们的想法是右对齐字段中的值并替换用零创建的空格。

data have;
    input id $16.;
    datalines;
    idnum3 
    idnum897  
    idnum2342345
    ;
run;

data want;
    set have;
    want = translate(right(id), "0", " ");
run;