通常會說「SAS缺失值等於負無窮大」。但是這個陳述存在問題,因爲缺失值可能有27或28個「風味」(缺省值.
和.a
到.z
和._
),每個都有一個預定義的排序順序。SAS如何區分缺失值和缺失值?
因爲它不能是無窮的一些人比其他人更大,我才明白:
- 缺失值像對待負無窮相比,有效的數字數據時,這
- 與其他缺失值進行比較時,它們會與另一組預定義規則進行排名。
所以我的問題是:在最低級別,SAS如何存儲數值數據,以便能夠區分缺失值和非缺失值?有沒有「缺失位」就像有一個「符號位」?
通常會說「SAS缺失值等於負無窮大」。但是這個陳述存在問題,因爲缺失值可能有27或28個「風味」(缺省值.
和.a
到.z
和._
),每個都有一個預定義的排序順序。SAS如何區分缺失值和缺失值?
因爲它不能是無窮的一些人比其他人更大,我才明白:
所以我的問題是:在最低級別,SAS如何存儲數值數據,以便能夠區分缺失值和非缺失值?有沒有「缺失位」就像有一個「符號位」?
SAS將數字存儲爲使用64位IEEE格式的浮點值。他們挑選了28個特定的位組合,並用它們來表示。,._和.a到.z。按照慣例,他們被定購。到.a到.z。我不確定是否選擇了這些值是爲了更容易測試該順序,或者如果排序是他們使用的特定位模式的事故。
您可以查看通過查看存儲的值所使用的位模式。
data _null_;
length i 8 str $8 ;
do i=._,.,.a,.z,constant('small'),0,1,constant('big');
str=peekclong(addrlong(i));
str=reverse(str);
put i best12. @15 i hex16. @35 str $hex16. ;
end;
run;
結果
_ _ FFFFFF0000000000
. . FFFFFE0000000000
A A FFFFFD0000000000
Z Z FFFFE40000000000
2.22507E-308 0010000000000000 0010000000000000
0 0000000000000000 0000000000000000
1 3FF0000000000000 3FF0000000000000
1.797693E308 7FEFFFFFFFFFFFFF 7FEFFFFFFFFFFFFF
它實際上並沒有明確地存儲負無窮大,在內存中。它只是在操作中被視爲負無窮。如果有多個缺失值,它基本上會根據缺失值的類型打破平局。 – Carl
有些無限大於其他。嘗試計算每個自然數與[0,1]中的每個實數進行計數。 – Carl
不在計算機上測試,但我相信所有數字都是雙精度值,甚至是缺失值。我認爲它們代表IEEE雙精度浮點表示中的最後27(或28)個整數。是'.'>還是<'._'? – DomPazz