2016-07-30 6 views
2

일반적으로 "SAS 누락 값이 마이너스 무한대"라고합니다. 그러나 누락 된 값 (기본값 : ..a ~ .z._)이 27 개 또는 28 개 "미리 정의 된 정렬 순서가있는"맛보기가있을 수 있으므로이 문에는 문제가 있습니다. 그것은 어떤 무한대가 다른 사람보다 더 큰 것을 할 수 없기 때문에SAS는 누락 값과 누락 값을 어떻게 구별합니까?

, 나는 그것을 이해했다 :

  1. 누락 된 값은 유효 숫자 데이터에 비해 마이너스 무한대처럼 취급하고, 그
  2. 된다
  3. 다른 누락 값과 비교할 때 다른 미리 정의 된 규칙 세트로 순위가 지정됩니다.

내 질문은 : 최저 수준에서 SAS는 누락 된 숫자 값과 누락 된 값을 구별 할 수있는 방식으로 숫자 데이터를 어떻게 저장합니까? "사인 비트"가있는 것처럼 "실종 비트"가 있습니까?

+0

결과. 그것은 단지 연산에서 음의 무한대로 취급됩니다. 누락 된 값이 여러 개인 경우 누락 된 값의 유형에 따라 기본적으로 연결이 끊어집니다. – Carl

+0

일부 무한대는 다른 무한대보다 큽니다. [0,1]에있는 모든 실수를 계산할 때 모든 자연수를 계산 해보십시오. – Carl

+0

테스트 할 컴퓨터가 아니지만 모든 숫자가 두 배이고 값이 누락 된 것 같습니다. 나는 그들이 IEEE double precision 부동 소수점 표현에서 마지막 27 개 (또는 28 개)의 정수를 대표한다고 생각한다. '.'> 또는 <'._'입니까? – DomPazz

답변

3

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 
+0

글쎄, 당신이 두 개의 첫 번째 문장을 제거하면 (나는 왜 내가 말할 수 있는지 확신 이), 나는 이것을 대답으로 받아 들일 것이다. –

+1

첫 번째 문장은 질문의 첫 번째 단락에 대한 응답입니다. – Tom

+1

나는 대답을 다시 말했습니다. – Tom