我试图找出以下内容:我有SAS数据集'ids',其字符变量具有不同的长度,如idnum3,idnum897或idnum2342345.需要创建具有相同长度的每个ID并添加前导零以使其像'000000idnum3','0000idnum897',idnum2342345一样.我尝试了很多选项,但似乎没什么用.请给我任何建议.谢谢!
这里有两种通用方法.
首先,如果字段完全是数字,则使用该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)