2014-10-22 38 views
2

也许这是个不好的问题,但我无法找到任何地方SAS中数值类型变量的下限和上限。我发现this论文背后的所有理论,并在一些论坛上讨论说上限是1E200,但我确信它是(操作)系统架构的依赖。尽管如此,我还是希望能有更正式的东西,比如可以用来比较MIN_NUMERIC_VALUE或MAX_NUMERIC_VALUE,以避免溢出。任何相关信息,表示赞赏。 MariusSAS中数值变量的上下限

回答

3

CONSTANT函数为您提供这样的信息。

%put %sysfunc(constant(big)); 

对于windows系统,大约是1.8e308。

作为背景,在窗口编号是基于存储号码像这样:

1 bit : sign 
10 bits : exponent (the result is 2 to the power of this times the mantissa; 
        this is like the 13 in 1.3425e13 in scientific notation) 
53 bits : mantissa (this would be the 'decimal' portion, so the 1.3425 in the above. 
        A fraction of 2, and strictly less than 2.) 

的指数可以存储高达2^10-1,所以仅由指数部分表示的实际数量是2 ^(2^10-1)倍尾数。尾数可以小于2,因此任何给定指数的最大数是2 ^(指数)* 2 - 1。

因此,您可以存储2 ^(2^10-1)* 2-1,或2^1024-1,几乎是1.8e308。

+0

嘿乔!感谢您的答复和详细程度。我已经试图从文档中理解,但是我还没有进行太多的计算:]非常感谢。 – Marius 2014-10-23 08:11:41

+1

不错。 CONSTANT函数接受一个参数“EXACTINT”,告诉你可以存储在变量中的最大整数。看到这个例子:data _null_; do i = 3 to 8; a = CONSTANT('EXACTINT',i); put i = a = 17.0; end; run; – 2014-10-23 11:38:43

0

可以存储在Windows的SAS变量中的最大整数是9,007,199,254,740,992,使用长度= 8。 Here is a table of precission for different lengths on Windows

+0

嗨。感谢你的回答。我发现该表与第2页上的[here](http://www.lexjansen.com/nesug/nesug02/at/at002.pdf)中的表相同。但是,这与更精确的整数限制有关代表,而不是法定数值的界限。我发现它是依赖于系统的,但我仍然期望将限制设置为**和**保存在某个常量中。 – Marius 2014-10-22 10:41:41