用COMMAw,d转换数字

时间:2019-01-25 10:20:28

标签: sas

我正在关注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 吗?

2 个答案:

答案 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          |
+---------------------------+-------------------+------------+---------------------+-----------------+