我对SAS表中的某些列使用PUT和INPUT进行转换时遇到问题。
我尝试格式化:
###I need: Using:
tipdoc='01' -> tipdoc=1 input(tipdoc, 1.)
coddoc=1234 -> coddoc=00001234 put(coddoc, z8.)
但是,我得到这个结果:
tipdoc=0
coddoc= .
你有什么主意吗? 谢谢。
答案 0 :(得分:3)
该信息告诉INPUT
如何解释输入值。 1.
仅选择0
位,您将获得0数字。 coddoc
已经是一个数字,只需要一种用于显示前导零的格式,或者您可能想要一个带有前导零的字符变量。
data want;
tipdoc='01';
coddoc=1234;
tipdoc_num = input(tipdoc,best12.);
format coddoc z8.;
coddoc_char = put (coddoc,z8.);
run;
ods listing;
proc print data=want;
run;
--------
tipdoc_ coddoc_
Obs tipdoc coddoc num char
1 01 00001234 1 00001234
答案 1 :(得分:1)
您使用格式将值转换为文本。您使用INFORMAT将文本转换为值。将FORMAT与FORMAT和PUT语句以及PUT()(以及PUTN()和PUTC())函数一起使用。将INFORMATS与INFORMAT和INPUT语句以及INPUT()(以及INPUTC()和INPUTN())函数一起使用。
如果TIPDOC
是一个字符串,则使用的INFORMAT宽度至少应等于该变量的最长值。为了安全起见,您可以只使用所使用的信息所允许的最大宽度。
numberic_tipdoc = input(tipdoc,32.);
如果CODDOC
是一个数字,则可以使用一种格式来显示前导零的值。或使用PUT()
函数创建具有格式化值的字符变量。
format coddoc z8. ;
character_coddoc = put(coddoc, z8.);
如果CODDOC的转换值显示为句点,则其值为缺失值。这就是SAS显示缺少数字值的方式。您可以使用MISSING
选项告诉SAS使用其他字符来显示缺失值。例如,要将其显示为空格,请使用命令
options missing=' ';
在使用PUT()函数或使用其他方法打印值之前。
或者您可以只测试程序是否缺少CODDOC
,然后为新变量使用其他值。
character_coddoc = put(coddoc, z8.);
if missing(coddoc) then character_coddoc='missing';