Mettez en surbrillance les cellules en fonction des noms de colonne correspondantsJ'ai un script qui colore les valeurs minimales en jaune pour chaque colonne Studentized d'une table. Je souhaite également mettre en évidence les valeurs adjacentes à ces valeurs dans les colonnes brutes. Par exemple, pour Studentized Resid Rest Pulse, la cellule adjacente à -2,321144119 dans la colonne Rest Pulse, c'est-à-dire 44. Comment puis-je faire cela en jsl? L'expression régulière ou la correspondance peuvent-elles être utiles ? Merci
dt = current data table();
col = dt << get column names( string );
nc = N Items( col );
For( i = 1, i <= nc, i++,
Cols = Column(dt,i);
If( Contains( col[i], "Studentized Resid" ),
Min = dt << get rows where(as column(Cols)==(Col Min( Cols )));
Cols << color cells(Yellow, Min);
)
);
Je recherche quelque chose comme ça :

Re : Mettez en surbrillance les cellules en fonction des noms de colonnes correspondants@Jeff_Perkinson Salut Jeff, j'ai déjà travaillé sur la partie sous-chaîne. Merci quand même!!Re : Mettez en surbrillance les cellules en fonction des noms de colonnes correspondants@txnelson Voulez-vous dire quelque chose comme ça?
dt = Current Data Table();
// I changed the name from "col" to colNameList to keep from
// it being confused with the variable "Cols". It isn't
// confusing to JMP, just to me
colNameList = dt << get column names( string );
nc = N Items( colNameLIst );
// Loop across all columns
For( i = 1, i <= nc, i++,
// Create a variable that contains the "column" representation
// of the column name string value
Cols = Column( dt, i );
// If the column name starts with the string "Studentized Resid"
// and if so, then process
// I changed this because your Substr() function below indicates
// that the column with "Studentized Resid" will be at the beginning
If( Left( colNameList[i], 17 ) == "Studentized Resid",
// Find the minimum value for the column
MinValue = Col Min( Cols );
// Find all of the rows that have the minimum value. There
// could be more than one row with the minimum value, but this
// code only uses the first row
MinRows = dt << get rows where( As Column( Cols ) == MinValue );
// Theoretically, there should always be a matching value for this,
// but it is a good way to make sure the code will not fail. Also,
// if you ever want to deal with the posibility of more than one
// row matching the minimum, you would do it using this type of
// code structure
If( N Rows( MinRows ) > 0,
Cols << color cells( Yellow, MinRows ),
//column( Substr( colNameList[i], 19 ) ) << color cells( Yellow, MinRows )
);<BR /> column( Substr( colNameList[i], 19 ) ) << color cells( Yellow, MinRows )
)
);
Je l'ai fait fonctionner. Merci beaucoup pour l'orientation..
Re : Mettez en surbrillance les cellules en fonction des noms de colonnes correspondantsJe ne comprends peut-être pas votre problème.Si vous souhaitez colorer les cellules adjacentes aux valeurs minimales trouvées pour les colonnes contenant "Studentized .....", alors tout ce que vous avez à faire est de le faire.Vous avez la liste des noms de colonnes ...... colNamesList et vous parcourez les colonnes.Lorsque vous trouvez une colonne qui contient "Studentized......", vous trouvez alors le nom de l'autre colonne que vous voulez colorer et la ligne qui est la valeur minimale.Cela signifie donc que vous connaissez également les cellules qui sont adjacentes aux cellules que vous allez colorier .....
column( Substr( colNameList[i], 19 ) ) << << color cells( Yellow, MinRows )<BR />
et si vous ajoutez ceci juste après la coloration de la colonne "Studentized......", cela colorera la cellule appropriée
Re : Mettez en surbrillance les cellules en fonction des noms de colonnes correspondantsEst le Substr() fonction ce que vous manquez?
resid_colname="Studentized Resid Rest Pulse";
//There are 19 characters in "Studentized Resid "
orig_colname = substr(resid_colname, 19);
show(orig_colname);
/*:
orig_colname = "Rest Pulse";
Re : Mettez en surbrillance les cellules en fonction des noms de colonnes correspondants@txnelson Salut Jim, je suis désolé s'il me manque quelque chose ici. Je voulais également mettre en évidence les colonnes brutes adjacentes pour chaque colonne étudiante. Je ne suis pas capable de faire ce travail.
Re : Mettez en surbrillance les cellules en fonction des noms de colonnes correspondantsVoici une simple refonte de votre script.Cela fonctionne avec vos exemples de données et devrait fonctionner avec autant de colonnes que vous avez dans la table de données
dt = Current Data Table();
// I changed the name from "col" to colNameList to keep from
// it being confused with the variable "Cols". It isn't
// confusing to JMP, just to me
colNameList = dt << get column names( string );
nc = N Items( colNameLIst );
// Loop across all columns
For( i = 1, i <= nc, i++,
// Create a variable that contains the "column" representation
// of the column name string value
Cols = Column( dt, i );
// If the column name starts with the string "Studentized Resid"
// and if so, then process
// I changed this because your Substr() function below indicates
// that the column with "Studentized Resid" will be at the beginning
If( Left( colNameList[i], 17 ) == "Studentized Resid",
// Find the minimum value for the column
MinValue = Col Min( Cols );
// Find all of the rows that have the minimum value. There
// could be more than one row with the minimum value, but this
// code only uses the first row
MinRows = dt << get rows where( As Column( Cols ) == MinValue );
// Theoretically, there should always be a matching value for this,
// but it is a good way to make sure the code will not fail. Also,
// if you ever want to deal with the posibility of more than one
// row matching the minimum, you would do it using this type of
// code structure
If( N Rows( MinRows ) > 0,
Cols << color cells( Yellow, MinRows )
);
// Output the requested values
Show( Substr( colNameList[i], 19 ), Cols[MinRows[1]] );
);
);
Re : Mettez en surbrillance les cellules en fonction des noms de colonnes correspondantsJe n'ai toujours pas été en mesure de comprendre comment je peux résoudre ce problème. J'ai parcouru d'autres questions et le guide de script pour accéder à mon script le plus récent.
Voici mon script le plus récent :
dt = current data table();
col = dt << get column names( string );
nc = N Items( col );
For( i = 1, i <= nc, i++,
Cols = Column(dt,i);
If( Contains( col[i], "Studentized Resid" ),
Min = dt << get rows where(as column(Cols)==(Col Min( Cols )));
Cols << color cells(Yellow, Min);
//show(Loc())
MinValue = Col Min(Cols);
ColValue = As List(Cols << Get Values);
show(Loc(ColValue,MinValue));
show(substr(col[i], 19,100));
)
);
J'apprécierais vraiment si quelqu'un pouvait me montrer comment je peux poursuivre en utilisant la méthode Substring pour faire correspondre les colonnes. Merci d'avance.
Re : Mettez en surbrillance les cellules en fonction des noms de colonnes correspondantsCela semble être une approche raisonnable.
Re : Mettez en surbrillance les cellules en fonction des noms de colonnes correspondantsToutes les colonnes brutes qui ont/correspondent aux colonnes Studentized doivent être mises en surbrillance. Je regardais le guide de rédaction et j'essayais de travailler avec Regex Match ainsi qu'avec une sous-chaîne pour extraire les noms de colonne sans le "Studentized Resid". Je conserve ici également une liste des numéros de lignes des colonnes en surbrillance, en espérant que cela aide à atteindre ce que je veux. Toute meilleure approche sera très appréciée.@txnelson
Re : Mettez en surbrillance les cellules en fonction des noms de colonnes correspondantsComment envisagez-vous la saisie des colonnes à traiter ?
Avez-vous lu le Guide de création de scripts ?Il y a de nombreux exemples dans le livre qui vous donneront des idées.
Aide==>Livres==>Guide de script
Re : Mettez en surbrillance les cellules en fonction des noms de colonnes correspondants@pmroz merci pour la réponse, cependant, je cherche une solution plus dynamique à un tel problème car j'aurais peut-être
a) Beaucoup de colonnes
b) Noms de colonnes différents à l'avenir.
Existe-t-il des fonctions JMP capables d'effectuer cette tâche ? Merci
Re : Mettez en surbrillance les cellules en fonction des noms de colonnes correspondantsVoici une méthode avec les noms de colonne codés en dur :
dt = Current Data Table();
col = dt << get column names( string );
nc = N Items( col );
For( i = 1, i <= nc, i++,
Cols = Column( dt, i );
If( Contains( col[i], "Studentized Resid" ),
Min = dt << get rows where( As Column( Cols ) == (Col Min( Cols )) );
Cols << color cells( Yellow, Min );
:Rest Pulse << color cells( Yellow, Min );
:Run Pulse << color cells( Yellow, Min );
:Max Pulse << color cells( Yellow, Min );
);
);