我正在使用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。
有人可以解释一下这种行为吗?
答案 0 :(得分:1)
重点是 INFORMAT 上的十进制规范与限制数字的精度无关。相反,当源文本不包含小数点时,它是指示放置小数点的位置。如果您使用DOLLAR5.2来读取字符串' 12345'结果将是123.45。
您提出的第二点是,当使用列表模式输入时,SAS将忽略信息中指定的宽度,而是使用可用数据的宽度。您的第一个示例是使用列表模式输入,第二个示例是使用格式化模式输入。第三个示例也使用列表模式输入,因为您在内联信息规范前面包含冒号前缀。
如果要将值四舍五入到小数点后两位,请在读取源数据后使用ROUND()
函数。
salary = round(salary,.01);