類似於 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}
也許比我聰明的人可以用它來製作一個更簡單的版本。
而且,當然,無論您選擇什麼方法,都可以用來創建一個自定義函數,合併()。