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