像JSL中的COALESCE函數我一直在尋找一個函數,如果X列為空,我們可以使用一個替代值(例如A),例如COALESCE函數,該方程式可能類似於:
COALESCE(:X, A)
如果X不為null,則返回X的值
如果X為null,則返回值A
我知道我們可以通過使用一些複雜的公式來獲得這樣的結果,但是我想知道默認情況下我們是否可以在JSL中具有類似的功能。
非常感謝您的幫助。
其他回复:像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>回复:像JSL中的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()。