什么是系统缺失值?
系统缺失值代表未知或不适用的数据值。 在数据库中,这些值通常称为 NULL 值。 系统缺失值不同于空白值。 空白值通常在“类型”节点中定义成可以视为用户定义缺失值的特定值或值范围。 在建模上下文中,空白值是以不同的方式处理。
构造系统缺失值
在从数据源读取的数据中,可能存在系统缺失值(例如,数据库表可能包含
NULL 值)。 您可通过在表达式中使用值 undef
来构造系统缺失值。 例如,以下 CLEM 表达式返回
Age
(如果小于或等于 30
)或缺失值(如果大于
30
):
if Age > 30 then undef else Age endif
执行外连接时,数字除以零时,计算负数的平方根时,以及在其他情况下,也可以创建缺失值。
显示系统缺失值
在表和其他输出中,系统缺失值显示为 $null$
。
检验系统缺失值
使用特殊函数 @NULL 可以在参数值为系统缺失值时返回 true
。 例如:
if @NULL(MyFieldName) then 'It is null' else 'It is not null' endif
传递到函数的系统缺失值
传递到函数的系统缺失值通常会将缺失值传播到输出。 例如,如果特定行中字段 f1
的值是系统缺失值,那么对于该行,表达式 log(f1)
也会求值为系统缺失值。 @NULL 函数是一个例外。
涉及算术运算符的表达式中的系统缺失值
将算术运算符应用于包含系统缺失值的值会产生系统缺失值。 例如,如果特定行中字段 f1
的值是系统缺失值,那么表达式 f1 + 10
也会求值为该行的系统缺失值。
涉及逻辑运算符的表达式中的系统缺失值
在涉及逻辑运算符的表达式中处理系统缺失值时,三值逻辑(true、false 和 missing)的规则适用,并可以在真值表中描述。 下列各表显示常用逻辑运算符 not、and 和 or 的真值表。
操作数 | NOT 操作数 |
---|---|
是 | 否 |
否 | 是 |
missing | missing |
Operand1 | Operand2 | 操作数 1 AND 操作数 2 |
---|---|---|
是 | 是 | 是 |
是 | 否 | 否 |
是 | missing | missing |
否 | 是 | 否 |
否 | 否 | 否 |
否 | missing | 否 |
missing | 是 | missing |
missing | 否 | 否 |
missing | missing | missing |
Operand1 | Operand2 | 操作数 1 OR 操作数 2 |
---|---|---|
是 | 是 | 是 |
是 | 否 | 是 |
是 | missing | 是 |
否 | 是 | 是 |
否 | 否 | 否 |
否 | missing | missing |
missing | 是 | 是 |
missing | 否 | missing |
missing | missing | missing |
涉及比较运算符的表达式中的系统缺失值
将系统缺失值与非系统缺失值比较时,结果会求值为系统缺失值,而非 true 或 false 结果。 系统缺失值可以相互比较;两个系统缺失值视为相等。
if/then/else/endif 表达式中的系统缺失值
使用条件表达式并且条件表达式返回系统缺失值时,该条件表达式会返回来自 else
子句的值。
“选择”节点中的系统缺失值
对于特定记录,当选择表达式求值为缺失值时,“选择”节点不会输出该记录(此操作同时适用于“包括”和“废弃”方式)。
“合并”节点中的系统缺失值
使用键进行合并时,不会合并任何在键字段中包含系统缺失值的记录。
汇总中的系统缺失值
按列汇总数据时,缺失值不会包括在计算中。 例如,在包含三个值 {1
、2
和 undef
} 的列中,该列中各个值的总和计算为 3
;平均值计算为 1.5
。