SAS中ROUND函数使用异常求助:为何结果列未全部保留一位小数
SAS中ROUND函数结果显示小数位缺失的原因与解决办法
问题重现
你执行的SAS代码:
data ex1; set ex1; if count in (1,2,3,4) then do;var1=round(var,0.1);end; run;
得到的var1列结果:
var1 9.3 8.8 2 5.8 3
原因分析
这不是ROUND函数的计算错误,而是SAS数值默认显示格式的特性导致的:
- ROUND(var,0.1)已经将数值四舍五入到了一位小数精度(实际存储的是2.0、3.0这类值);
- SAS默认使用
BEST.格式显示数值,该格式会自动省略无意义的尾零,所以2.0显示为2,3.0显示为3,但数值本身的精度并未丢失。
验证方法
可以用PUT函数查看数值的完整存储状态:
data check; set ex1; var1_full = put(var1, 8.2); run;
此时var1_full会显示为9.30、8.80、2.00、5.80、3.00,证明ROUND的计算结果确实是一位小数精度。
解决办法
如果需要强制显示一位小数,在DATA步中添加格式声明即可:
data ex1; set ex1; if count in (1,2,3,4) then do;var1=round(var,0.1);end; format var1 8.1; /* 指定显示一位小数 */ run;
修改后var1会显示为:
var1 9.3 8.8 2.0 5.8 3.0
内容的提问来源于stack exchange,提问作者Catherine Papanikos
相关产品推荐
相关产品推荐

