Como la función COALESCE en JSLHe estado buscando la función con la que podríamos tener un valor alternativo (por ejemplo, A) si la columna X es nula, como la función COALESCE, y la ecuación podría ser algo como:
COALESCE(:X, A)
si X no es nulo, devuelve el valor de X
si X es nulo, devuelve el valor A
Entendí que logramos tener tales resultados al tener una ecuación un poco complicada, pero me preguntaba si podríamos tener una función similar en JSL por defecto.
Muchas gracias por su ayuda.
OtroRe: Como la función COALESCE en JSLPuede usar loc nonmissing para encontrar el primero, funciona tanto para valores perdidos como para caracteres en blanco.
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: Como la función COALESCE en JSLNo hay incorporado JUNTARSE función en JSL. Sin embargo, para una sola columna, la fórmula no es tan complicada:
if( !Is Missing( :X ),
:X, //:X is not missing
"A" //else
);
Es cierto que se vuelve un poco más largo con más columnas, pero aún así no es tan malo.
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
);
Está perdido() tomará un argumento de lista o matriz y devolverá una lista o matriz de 0 y 1 indicando que faltan o no en esas ubicaciones.
Is Missing( {"a", " ", "c"} ); // returns {0, 1, 0}
Quizás alguien más inteligente que yo pueda usar eso para hacer una versión más simple.
Y, por supuesto, cualquier método que elija se puede utilizar para crear un función personalizada , Coalesce ().