SAS Informat提供不同的结果

时间:2017-07-12 11:02:20

标签: sas

我正在使用SAS信息的以下代码:

1

DATA a; 
INPUT NAME $ AGE SALARY ;
INFORMAT SALARY DOLLAR5.2; 
DATALINES; 
ABC 20 $9878.34223123123123
;

2

DATA b; 
INPUT NAME $ AGE SALARY : DOLLAR5.2;
DATALINES; 
ABC 20 $9878.34223123123123
;

3

DATA c; 
INPUT NAME $ AGE SALARY DOLLAR5.2;
DATALINES; 
ABC 20 $9878.34223123123123
;

前两个代码将工资存储为" 9878.34223123123123"这是没有美元符号的实际值,而最后一个只存储为98.78。

有人可以解释一下这种行为吗?

1 个答案:

答案 0 :(得分:1)

重点是 INFORMAT 上的十进制规范与限制数字的精度无关。相反,当源文本不包含小数点时,它是指示放置小数点的位置。如果您使用DOLLAR5.2来读取字符串' 12345'结果将是123.45。

您提出的第二点是,当使用列表模式输入时,SAS将忽略信息中指定的宽度,而是使用可用数据的宽度。您的第一个示例是使用列表模式输入,第二个示例是使用格式化模式输入。第三个示例也使用列表模式输入,因为您在内联信息规范前面包含冒号前缀。

如果要将值四舍五入到小数点后两位,请在读取源数据后使用ROUND()函数。

salary = round(salary,.01);