JSLのCOALESCE関数のようにCOALESCE関数のように、列Xがnullの場合に代替値(Aなど)を持つことができる関数を探していました。方程式は次のようになります。
COALESCE(:X, A)
Xがnullでない場合は、Xの値を返します。
Xがnullの場合、値Aを返します
少し複雑な方程式でこのような結果が得られることは理解しましたが、デフォルトでJSLで同様の機能を使用できるかどうか疑問に思いました。
ご助力ありがとうございます。
その他Re:JSLのCOALESCE関数のようにloc nonmissingを使用して、最初の値を見つけることができます。これは、欠落している値と空白の文字に対して機能します。
Names default to here( 1 );
dt = open("$SAMPLE_DATA\Big Class.jmp");
// blanking out some rows.
dt:age[[2, 5, 8]] = .;
dt:sex[[2, 9, 18]] = "";
dt:height[[2, 4, 14]] = .;
dt:weight[[1, 4, 14]] = .;
coalesce = function({list_of_whatever},
{DEFAULT LOCAL},
l = Evallist(list_of_whatever);
lnm = LocNonMissing(l);
if(nitems(lnm),
return(char(l[lnm[1]])); // assuming you'll want to use both numeric and character columns
);
);
// this should never be the weight value
New Column("Coalesce", character,
<<FORMULA></FORMULA>Re:JSLのCOALESCE関数のようにビルトインはありませんCOALESCE JSLの機能。 ただし、単一の列の場合、式はそれほど複雑ではありません。
if( !Is Missing( :X ),
:X, //:X is not missing
"A" //else
);
確かに、列が増えると少し長くなりますが、それでもそれほど悪くはありません。
if(
!Is Missing( :X ), :X, //:X is not missing
!Is Missing( :Y ), :Y, //:Y is not missing
!Is Missing( :Z ), :Z, //:Z is not missing
"A" //else
);
不足している()リストまたは行列の引数を取り、それらの場所に欠落しているかどうかを示す0と1のリストまたは行列を返します。
Is Missing( {"a", " ", "c"} ); // returns {0, 1, 0}
おそらく、私よりも賢い人がそれを使ってより単純なバージョンを作ることができます。
そしてもちろん、選択した方法を使用して、カスタム機能、Coalesce()。