システム値が欠落しているレコードの処理

システム欠損値とは

システム欠損値は、不明または適用できないデータ値を表します。 データベースでは、これらの値はよく NULL 値と呼ばれます。 システム欠損値は空白値とは異なります。 空白値は通常、データ型ノード内で特定の値または値範囲として定義され、ユーザー定義の欠損と見なすことができます。 空白値はモデル作成のコンテキストに応じてさまざまに処理されます。

システム欠損値の構築

システム欠損値は、データ・ソースから読み取られるデータ内に存在する可能性があります (例えば、データベースの表には NULL 値が含まれている場合があります )。 システム欠損値は、式の中の値 undef を使用して構成されます。 例えば、次の CLEM 式は、 30以下の場合は Ageを返し、 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 は、その行のシステム欠損値としても評価されます。

論理演算子を含む式でのシステム欠損値

論理演算子を含む式でシステム欠損値を処理する場合、 3 値論理 (truefalse、および missing) の規則が適用され、真理値表で記述できます。 notand、および or の共通論理演算子の真理値は、以下の表に示されています。

表 1. NOT の真理値表
オペランド NOT オペランド
はい いいえ
いいえ はい
なし なし
表 2. AND の真理値表
Operand1 Operand2 オペランド 1 AND オペランド 2
はい はい はい
はい いいえ いいえ
はい なし なし
いいえ はい いいえ
いいえ いいえ いいえ
いいえ なし いいえ
なし はい なし
なし いいえ いいえ
なし なし なし
表 3. OR の真理値表
Operand1 Operand2 オペランド 1 OR オペランド 2
はい はい はい
はい いいえ はい
はい なし はい
いいえ はい はい
いいえ いいえ いいえ
いいえ なし なし
なし はい はい
なし いいえ なし
なし なし なし

比較演算子を含む式でのシステム欠損値

システム欠損値と非システム欠損値とを比較する場合、結果は、真 (true) または偽 (false) の結果ではなく、システム欠損値と評価されます。 システム欠損値同士は互いに比較できます。2 つのシステム欠損値は等しいと見なされます。

if/then/else/endif 式でのシステム欠損値

条件式を使用し、条件式がシステム欠損値を返す場合、 else 節の値が条件式から返されます。

条件抽出ノードでのシステム欠損値

特定のレコードで、選択式が欠損値に評価される場合、レコードは条件抽出ノードから出力されません (この処理は包含 (Include) と破棄 (Discard) の両方のモードに適用されます)。

レコード結合ノードでのシステム欠損値

キーを使用して結合する場合、キー・フィールドにシステム欠損値を持つレコードは結合されません。

集計でのシステム欠損値

列のデータを集計する場合、欠損値は計算に含まれません。 例えば、3 つの値 { 12、およびundef } の列では、列内の値の合計が 3 として計算されます。平均値は 1.5 として計算されます。