SAS如何区分缺失值和非缺失值?

时间:2016-07-30 02:08:36

标签: sas storage missing-data

通常说" SAS缺失值等于减去无穷大"。但是这个陈述有一个问题,因为可能有27或28种口味"缺失值(默认..a.z._),每个都有预定义的排序顺序。

由于某些无限大于其他无穷大,我开始理解:

  1. 与有效数值数据相比,缺少的值被视为减去无穷大,而
  2. 与其他缺失值进行比较时,它们会使用另一组预定义规则进行排名。
  3. 所以我的问题是:在最低级别,SAS如何以可以区分缺失数据和非缺失数值的方式存储数值数据?是否有"缺失位"就像有一个"符号位"?

1 个答案:

答案 0 :(得分: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