Comme la fonction COALESCE en JSLJ'ai cherché la fonction avec laquelle nous pourrions avoir une valeur alternative (par exemple A) si la colonne X est nulle, comme la fonction COALESCE, et l'équation pourrait ressembler à quelque chose comme :
COALESCE(:X, A)
si X n'est pas nul, alors il renvoie la valeur de X
si X est nul, alors il renvoie la valeur A
J'ai compris qu'on arrivait à avoir de tels résultats en ayant une équation un peu compliquée, mais je me demandais si on pouvait avoir une fonction similaire en JSL par défaut.
Merci beaucoup pour votre aide.
Études de consommation et de marchéPartager et communiquer les résultatsRe : Comme la fonction COALESCE dans JSLVous pouvez utiliser loc nonmissing pour trouver simplement le premier, cela fonctionne pour les valeurs manquantes ainsi que pour les caractères vides.
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 : Comme la fonction COALESCE dans JSLIl n'y a pas d'élément intégré SE FONDRE fonction en JSL. Cependant, pour une seule colonne, la formule n'est pas si compliquée :
if( !Is Missing( :X ),
:X, //:X is not missing
"A" //else
);
Certes, cela devient un peu plus long avec plus de colonnes, mais ce n'est toujours pas trop mal.
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 manquant() prendra un argument de liste ou de matrice et renverra une liste ou une matrice de 0 et de 1 indiquant qu'il manque ou non à ces emplacements.
Is Missing( {"a", " ", "c"} ); // returns {0, 1, 0}
Peut-être que quelqu'un de plus intelligent que moi pourra l'utiliser pour en faire une version plus simple.
Et, bien sûr, quelle que soit la méthode que vous choisissez, elle peut être utilisée pour créer un fonction personnalisée , Fusionner().