Comment créer une colonne de formule pour trouver le maximum de plusieurs colonnes<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />J'ai plusieurs colonnes de données numériques (voir exemple ci-dessous) et j'aimerais créer une colonne de formule pour trouver la valeur maximale pour chaque ligne dans les colonnes.Toute aide serait appréciée.Merci!
Valeur 1 Valeur 2 Valeur 3 Valeur Max (je mettrais la formule dans cette colonne)
1 9 6 9
2 1 5 5
3 7 4 7
4 2 6 6
Re : Comment créer une colonne de formule pour trouver le maximum de plusieurs colonnesje ne sais pas pourquoi, mais le code txnelsons n'a pas fonctionné pour moi.
après le débogage, j'ai dû remplacer la dernière ligne par :
namelist[ Loc( as list(maxes`), Max( maxes ) )[1] ];
maintenant ça semble fonctionner
Re : Comment créer une colonne de formule pour trouver le maximum de plusieurs colonnesvoici un exemple simple affichant le nom de la colonne max
Names Default To Here( 1 );
// Open Data Table: semiconductor capability.jmp
// → Data Table( "semiconductor capability" )
dt = Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
dt << New Column( "Example",
character,
formula(
If( Row() == 1,
namelist = {"NPN1", "NPN2", "NPN3", "NPN4"}
);
maxes = [];
For( i = 1, i <= N Items( namelist ), i++,
maxes = maxes || Matrix( Column( namelist[i] )[Row()] )
);
If( Row() <= 5,
Show( maxes )
);
namelist[Loc( maxes, Max( maxes ) )[1]];
)
);
Re : Comment créer une colonne de formule pour trouver le maximum de plusieurs colonnesCela n'est peut-être pas séquentiel, mais quelle formule de colonne donnerait non pas la de la colonne maximale, mais le de la colonne avec la valeur maximale ?AIT
Re : Comment créer une colonne de formule pour trouver le maximum de plusieurs colonnes@txnelson Tu es un sorcier ! Merci pour l'aide.
Re : Comment créer une colonne de formule pour trouver le maximum de plusieurs colonnesLa syntaxe que vous avez créée pour votre exemple ne fonctionnera pas, cependant, ce que j'en ai retenu, c'est que vous souhaitez créer une nouvelle colonne contenant la valeur maximale dans une liste de colonnes.Le code spécifié dans une formule, telle que
:a * 2 + :p</img>
doit être saisi comme la chaîne littérale réelle souhaitée pour la formule.JMP n'effectuera aucune évaluation du JSL dans la formule avant qu'il ne soit transmis à la nouvelle colonne en cours de création.Par conséquent, la formule que l’on veut utiliser doit être pleinement réalisée.Et dans votre code, il doit être dynamique, ce qui nécessite que l'instruction de formule soit créée en JSL puis transmise à la formule.
Vous trouverez ci-dessous un script qui montre une façon de procéder
names default to here(1);
dt = Current Data Table();
// The formula that needs to be passed into the new column JSL needs
// to look like
// Max( :NameA, :UniqueX, :Name bb )
// A literal string of ":NameA, :UniqueX, :Name bb" needs to be created
// and then plugged into the JSL and then executed
// ":NameA, :UniqueX, :Name bb" is just an illustration, what the
// make up of the string needs to be derived from the actual column
// names in the data table
FreqList = dt << get column names( string, numeric );
freqString = "";
// build the JSL in the form that is required for the formula
For( i = 1, i <= N Items( FreqList ), i++,
If(
Contains( FreqList[i], "Unique" ) == 1 |
Contains( FreqList[i], "Name" ) == 1,
If( i==1, delim = "", delim = ",");
freqString = freqString || delim || " :" || FreqList[i]
)
);
// Run the command, passing into the formula the command string developed above
Eval( Parse( "dt << New Column (\!"Freq\!", numeric, Formula( Max( " || freqString || " )));" ) );
Re : Comment créer une colonne de formule pour trouver le maximum de plusieurs colonnes@txnelson J'ai un problème similaire. Où je veux obtenir le maximum de plusieurs colonnes. Dans mon exemple, j'ai une liste de colonnes appelée FreqList. Que j'ai créé en utilisant une formule similaire à,
dt = current data table();
FreqList = dt << get column names( string, numeric );
For( i = N Items( FreqList ), i >= 1, i--,
If( Contains( FreqList[i], "Unique" )== 0,
FreqList= Remove( FreqList, i, 1 ),
Contains( FreqList[i], "Name" )== 0,
FreqList = Remove( FreqList, i, 1 )
)
);
// Then I was thinking something like the following should work,
dt << New Column ("Freq", numeric, Formula(Col Max(FreqList)));La façon manuelle de procéder serait de créer une nouvelle colonne appelée "Freq". Créez ensuite une formule comme Maximum(:Freq1,:Freq2,:Freq3,FreqN), qui créerait une nouvelle colonne contenant la fréquence maximale basée sur la ligne.
Comment pourrais-je faire cela en JSL ?
Re : Comment créer une colonne de formule pour trouver le maximum de plusieurs colonnesLa question posée par @adampaulsmith et répondu par @pmroz utilise la fonction Maximum() dans une formule définie pour la colonne résultante.La formule bouclera automatiquement sur chaque ligne et appliquera la formule.Ainsi, aucune référence de ligne ne doit être faite.
Cependant, si vous l'utilisez dans du JSL ouvert, vous pouvez ajouter un indice aux références de colonne pour indiquer la ligne que vous traitez.
For( theRow = 1, theRow <= 10, theRow++,
:MaxValue[theRow] = Maximum( :Value 1[theRow], :Value 2[theRow], :Value 2[theRow] );
);
Voir la documentation sur JSL dans le Guide de script
Aide==>Livres==>Guide de script
Re : Comment créer une colonne de formule pour trouver le maximum de plusieurs colonnesSi vous souhaitez rechercher de nombreuses lignes, existe-t-il une fonction permettant de sélectionner une plage de lignes au lieu de saisir chaque ligne dans la fonction ?
Re : Comment créer une colonne de formule pour trouver le maximum de plusieurs colonnesMerci ! Je savais que ça devait être quelque chose de simple.
Re : Comment créer une colonne de formule pour trouver le maximum de plusieurs colonnesLe Fonction Maximum() je ferai cela pour vous.
Maximum(:Value 1, :Value 2, :Value 3)