我正在关注SAS help page,并试图获得与页面底部示例相同的结果。 我的代码:
data _null_;
test=23451.23;
result=input(test,comma10.2);
put 'this should be:' result;
run;
在日志中显示输出
this should be:23451
应为23,451.23。没有错误,没有有用的注释,也没有警告。
当我不使用输入功能时,它会提供正确的结果
data _null_;
test=23451.23;
format test comma10.2;
put 'this should be:' test;
run;
这是怎么回事?不能合并输入和 COMMAw,d 吗?
答案 0 :(得分:2)
格式用于将值转换为字符串。信息用于将字符串转换为值。您可以使用带有PUT和FORMAT语句或PUT()函数的格式。您可以使用带有INPUT和INFORMAT语句或INPUT()函数的信息。
因此INT_MAX < 5062500000000
函数需要一个字符串作为第一个参数,但是您给了它一个数字。 请注意,SAS将在日志中添加一个注释,表示必须将数字转换为字符。 SAS将使用int
格式进行转换,因此您的数字INPUT()
变为12个字符串BEST12.
。然后,当23451.23
函数使用' 23451.23'
信息格式时,它将仅读取前10个字符,而您会漏掉十进制数字。请注意,不仅宽度应该更长,而且信息中的小数点后不应包含值。如果您的信息的宽度更小,那么您可能会漏掉小数点,而SAS将隐含小数点(将整数值除以100)。
如果您希望数字以特定的方式显示,则只需将所需的格式附加到变量即可。您可以只将格式规范添加到INPUT()
语句中。
COMMA10.2
或使用PUT
语句将格式附加到变量。
put test= comma10.2 ;
如果要将数字转换为字符串,请使用FORMAT
函数
format test comma10.2;
或PUT()
函数。
char_result = put(test,comma10.2);
答案 1 :(得分:1)
使用Put语句:
data _null_;
test=23451.23;
result=put(test,comma10.2);
put 'this should be:' result;
run;
应该是:23,451.23
Link来说明函数之间的差异。 页面上的表格:
+---------------------------+-------------------+------------+---------------------+-----------------+
| Function Call | Raw Type | Raw Value | Returned Type | Returned Value |
+---------------------------+-------------------+------------+---------------------+-----------------+
| A PUT(name, $10.); | char, char format | ‘Richard’ | char always | ‘Richard ’ |
| B PUT(age, 4.); | num, num format | 30 | char always | ‘ 30’ |
| C PUT(name, $nickname.); | char, char format | ‘Richard’ | char always | ‘Rick’ |
| D INPUT(agechar, 4.); | char always | ‘30’ | num, num informat | 30 |
| E INPUT(agechar, $4.); | char always | ‘30’ | char, char informat | ‘ 30’ |
| F INPUT(cost,comma7.); | char always | ‘100,541’ | num, num informat | 100541 |
+---------------------------+-------------------+------------+---------------------+-----------------+