2014-10-22 80 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