像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()。