Comment obtenir des valeurs maximales sur plusieurs colonnes avec des données manquantes dans leurs lignes !Salut,
Disons que nous avons un ensemble de données que nous voulons obtenir des valeurs maximales dans les colonnes sélectionnées
dt = New Table( "Untitled",
New Column( "a@b;2", Numeric, Set Values( [12, 33, 1] ) ),
New Column( "b", Numeric, Set Values( [2, 11, 2] ) ),
New Column( "c@d;3", Numeric, Set Values( [333, 1, 0] ) )
);
colnames = dt << getcolumnnames;
use_cols = {};
include = {"@"};
For( j = 1, j <= N Items( include ), j++,
For( i = 1, i <= Nitems( colnames ), i++,
If(Contains(colnames[i], include[j]),
insert into (use_cols , colnames[i]))
));
dt << new column("max_col",numeric,formula(Maximum(use_cols)))
Je ne comprends pas pourquoi il renvoie la valeur manquante dans max_col ? Devrions-nous boucler sur use_cols ?
Merci!
Tableau de donnéesAutreScriptRe : Comment obtenir des valeurs maximales sur plusieurs colonnes avec des données manquantes dans leurs lignes !Désolé! cela n'a pas marché !Re : Comment obtenir des valeurs maximales sur plusieurs colonnes avec des données manquantes dans leurs lignes !Merci txnelson pour votre excellente solution ! Vous avez toujours utile d'aller dans les détails et d'expliquer les choses très clairement!Re : Comment obtenir des valeurs maximales sur plusieurs colonnes avec des données manquantes dans leurs lignes !Exécutant sur un PC Windows, exécutant Windows 10, j'ai remonté plusieurs versions de JMP et exécuté votre script, et il s'est exécuté correctement sur toutes les versions.

Votre deuxième qualification, que parfois vous avez des valeurs manquantes dans vos données ne devrait pas être un problème.La fonction Maximum() gère les valeurs manquantes.
N'en sachant pas plus sur votre script, je vais souligner un problème possible.Si vous regardez la formule créée pour la colonne max_col, vous verrez :

La formule repose sur la liste "use_cols", donc chaque fois que la formule est exécutée ou réexécutée, elle va dans la liste et utilise la valeur "à ce moment-là" de "use_cols" et la place dans la formule.Si la valeur de "use_cols" est " {Nom( "a@b;2" ), Nom( "c@d;3" )} ", tout fonctionnera bien.Si pour une raison quelconque, la liste "use_cols" a changé sa valeur, la formule peut ne pas fonctionner et vous obtiendrez des valeurs manquantes.Ce que vous voulez vraiment, c'est que la formule soit
Maximum( {:Name( "a@b;2" ), :Name( "c@d;3" )} )
La façon la plus simple de le faire, d'après mon expérience, est de spécifier la nouvelle colonne et la formule comme suit :
Eval(Parse("dt << new column(\!"max_col\!",numeric,formula( Maximum(" || char(use_cols) || ")));"));
Il en résulte que la formule est spécifiée comme suit :

Re : Comment obtenir des valeurs maximales sur plusieurs colonnes avec des données manquantes dans leurs lignes !Salut,
Il vous suffit d'aider JMP à comprendre que la variable "use_cols" fait référence à des colonnes en ajoutant "as columns" à votre dernière instruction :
dt << New Column( "max_col", numeric, formula( Maximum( as columns( use_cols ) ) ) );
Re : Comment obtenir des valeurs maximales sur plusieurs colonnes avec des données manquantes dans leurs lignes !J'ai oublié d'ajouter parfois des colonnes peuvent également contenir des valeurs manquantes. Je ne pouvais pas comprendre comment les ajouter lorsque j'ai construit la table de données.