【发布时间】:2022-01-16 15:40:27
【问题描述】:
假设我有两个大数:5E31 和 8E34。有没有一种简单的方法可以在 SAS 中添加这些数字?我知道这些数字对于 SAS 来说可能太大了,但有什么捷径可走吗?
【问题讨论】:
-
我只知道在datastep中使用java对象添加它们的复杂方法
标签: sas
假设我有两个大数:5E31 和 8E34。有没有一种简单的方法可以在 SAS 中添加这些数字?我知道这些数字对于 SAS 来说可能太大了,但有什么捷径可走吗?
【问题讨论】:
标签: sas
您当然可以将这两个数字相加; SAS 可以存储超过 8e34 的数字。但是,您不能存储所有 34 位数字; SAS 使用 IEEE 754 双精度浮点数(在 Windows/Linux 上)并且可以精确存储多达几乎十六位数字(绝对精确到 15 位数字)。
请参阅Numerical Accuracy in SAS,详细了解 SAS 如何存储数字。另请参阅CONSTANT function documentation,它展示了如何获取一些值,例如系统上可存储的最大精确整数。
如果您确实需要这么高的精度,则需要使用另一种语言(例如,SAS 可以在某些版本中调用 Python 或 R,具体取决于您获得的许可),或者您需要实现自己的计算引擎,基于字符串或将数字分成两部分。 DS2 也有一些选项,但它们不能存储在 SAS 数据集中,因此它们只能在内部或数据库/等中使用。理解更精确数据类型的系统。
【讨论】:
ROUND,就像上面文章中提到的 SAS 一样 - 特别是,将 * 舍入到最接近的 1e16。由于1e16 之后的所有数字都不重要,因此您需要丢弃它们。