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

标签 sas storage missing-data

人们常说“SAS 缺失值等于负无穷大”。但是该语句有一个问题,因为可能有 27 或 28 种“风格”的缺失值(默认的 ..a.z._),每个都有预定义的排序顺序。

由于某些无穷大不可能比其他无穷大更大,所以我开始明白:

  1. 与有效数值数据相比,缺失值被视为减去无穷大,并且
  2. 与其他缺失值相比,它们按照另一组预定义规则进行排名。

所以我的问题是:在最低层面上,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

关于sas - SAS 如何区分缺失值和非缺失值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38669716/

相关文章:

sql - 有什么解决方案可以将此 SAS 代码写入 "proc sql"进程吗?

Android 访问外部存储

r - 基础 R 中缺失值的面积图

f# - 有没有更好的方法来查找 Deedle 系列中缺失值的第一个键?

windows - 以编程方式将 SAS 用户踢出

SAS Proc 表示 : How to capture non default statistics in output dataset such as nmiss p1 p99 etc?

sql-server - WHERE 子句运算符需要兼容的变量

linux - 如何增加 OS X 上的 Docker 基本卷大小?

c# - 存储:C# 等同于 PowerShell 命令

python - Pandas DataFrame 填充列中的缺失值