NULL値に関する規則


 

1.null値の表現方法について
2.null値の発生源
3.null値に対する処理
4.keyにnull値が含まれている場合
 

1.null値の表現方法について

第1番目の文字を"*"とする。

以下の例は全てnull値として扱われる。
* , *abc , *(div_by_0) , *****

以下の例は全てnull値としては扱われず、単なる文字列として扱われる。
(*) , abc* , a*****
 

2.null値の発生源

Mコマンドにおいてnull値が発生するケースは次の5つに分類される。
1)元データがnull値を含んでいる。
2)0割算が発生した。
3)存在しない行を参照した。
4)存在しない項目を参照した。
5)扱える数値の範囲を越えた。

2-1.元データがnull値を含んでいる。
2-2.0割算が発生した。mavg,mshare,mdiv
2-3.存在しない行を参照した。mjoin,mjoinr,mslide,
2-4.存在しない項目を参照した。field=をパラメータに持つコマンド全て
2-5.扱える数値の範囲を越えた
 

3.null値に対する処理

一般的規則
null値に対する演算に関して、null値は無視される。

msum,mavg,mmax,mmin
下記のデータに対して例えば"mavg k=1 f=2"を実行するとする。null値は無視されるため演算は"10/3"とはならず、"10/1"となる。
a *
a 12 ->  [mavg k=1 f=2]  ->  a 3
a *

下記のデータに対して"msum k=1 f=2"を実行するとする。全ての値がnull値であるため、結果もnull値となる。
a *
a *  ->  [msum k=1 f=2]  ->  a *
a *
 

0割算が発生する可能性があるコマンド
mavg,mdiv,mshare

mavg
下記のデータに対して"mavg k=1 f=2"を実行するとする。1項目目がbの2行は全てnull値であるため行数が0とカウントされる。その結果、演算は"0÷0"となり、0割算エラーが生じる。

mdiv
下記のデータに対して"mdiv f1=2 f2=3"を実行するとする。1行目については明らかに0割算となり、また2行目についても文字列は0として扱うため0割算となる。
また3行目と4行目については割る数、割られる数いずれかがnull値となるためnull値に関する一般的規則により結果もnull値となる。

a 10   0
a  5 abc
b  *  10
b  *   *
 

4.keyにnull値が含まれている場合