2016-07-30 28 views
2

「SAS欠損値がマイナス無限大に等しい」と一般に言われています。しかし、その文の問題点は、それぞれが事前に定義されたソート順を持つ、欠損値(デフォルト..z._から.a)の27または28「味」がすることができるので、あります。それはいくつかの無限大が他のものより大きいことをすることはできませんのでSASは欠損値と欠損値をどのように区別しますか?

は、私はそれを理解するようになりました:

  1. 欠損値はは、有効な数値データと比較すると、マイナス無限大のように扱われ、その
  2. されています
  3. 他の欠損値と比較すると、別の事前定義ルールセットでランク付けされます。

私の質問は、最低レベルで、SASは欠損値と欠損値を区別できるように数値データをどのように保存するのですか? 「符号ビット」があるような「欠けビット」はありますか?

+0

それは実際にメモリに明示的に負の無限大を格納されていません。これは操作の負の無限大として扱われているだけです。欠損値が複数ある場合、欠損値のタイプに基づいて本質的に結合が破られます。 – Carl

+0

そしていくつかの無限は他よりも大きいです。テストするコンピュータで[0,1] – Carl

+0

ないで、すべての実数をカウント対ごとの自然数をカウントしてみたが、私はすべての数字は、ダブルスでも欠損値であると信じています。私は彼らがIEEE倍精度浮動小数点表現で最後の27(または28)の整数を表すと思います。 '.'>または<' ._'ですか? – DomPazz

答えて

3

SAS格納番号64ビットIEEEフォーマットを使用して、浮動小数点値として。彼らは28個の特定のビットの組み合わせを選び、それを。、および.aから.zに代えて使用しました。大会によって、彼らは._toに命じられます。 .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 
+0

まあを参照してください。これを答えとして受け入れるかもしれない。 –

+1

最初の文は質問の最初の段落に対応しています。 – Tom

+1

私は答えを語った。 – Tom