Comment obtenir le numéro de ligne des cellules colorées dans une colonne et lui attribuer une balise (par exemple « 1 ») dans une colonne nouvellement créée ?J'ai utilisé Color Out of Spec Values() pour colorer les échecs de spécification dans mes données de mesure. J'ai plusieurs colonnes avec des données de mesure et les valeurs hors spécifications pour chaque colonne sont colorées en fonction de la spécification de chaque colonne de paramètres.
Pour chaque colonne de paramètres, je souhaite créer une colonne adjacente qui attribue un « 1 » lorsque la cellule est colorée, sinon « 0 ».
Comment y parvenir via JSL ?
Automatisation et scriptsFenêtresRe : Comment obtenir le numéro de ligne des cellules colorées dans une colonne et lui attribuer une balise (par exemple « 1 ») dans une colonne nouvellement créée ?wow, super idée - via le script de la colonne !
L'avantage de JMP :
Les solutions de contournement : )
Le truc pas si cool dans JMP :
Les solutions de contournement pour les solutions de contournement.
Pour obtenir directement les valeurs hors spécifications sans passer par la couleur, veuillez voter : :folded_hands: est dans les spécifications (valeur)
Re : Comment obtenir le numéro de ligne des cellules colorées dans une colonne et lui attribuer une balise (par exemple « 1 ») dans une colonne nouvellement créée ?N'utilisez pas la boucle For et utilisez << déplacer les colonnes sélectionnées pour déplacer vos colonnes après la colonne spécifiée
Voir plus...
Names Default To Here(1);
get_colored_cells = Function({dt, colname}, {Default Local},
colscript = Column(dt, colname) << Get Script;
l = Substitute(Name Expr(colscript), Expr(New Column()), List());
colored_cells = {};
Try(
colors = l["Color Cells"];
If(Type(colors[1]) == "List",
jmptrickery = 1,
jmptrickery = 0
);
For Each({color}, colors,
If(jmptrickery,
Insert Into(colored_cells, color[2]),
Insert Into(colored_cells, color)
)
);
);
Return(Matrix(colored_cells));
);
create_failed_column_after = function({dt, colname}, {Default Local},
curname = Column(dt, colname) << get name;
failed_rows = get_colored_cells(dt, colname);
row_vals = J(1, N Rows(dt), 0);
row_vals[failed_rows] = 1;
new_col = dt << New Column((curname || "_FAIL"), Numeric, Nominal, Values(row_vals));
dt << Move Selected Columns(new_col, After(Column(dt, colname)));
return(new_col);
);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
col_names = dt << Get Column Group("Processes");
dt << show window(0);
wait(0);
ps = dt << Process Screening(
Process Variables(Eval(col_names)),
Spec Limits Dialog("No (skip columns with no spec limits)")
);
ps << Color Out Of Spec Values(1);
ps << Close Window;
dt << Clear Select << Clear Column Selection;
For Each({colref}, col_names,
colname = colref << get name;
create_failed_column_after(dt, colname);
);
dt << show window(1);
wait(0);
Re : Comment obtenir le numéro de ligne des cellules colorées dans une colonne et lui attribuer une balise (par exemple « 1 ») dans une colonne nouvellement créée ?@jthi Merci. J'ai adapté votre script pour l'utiliser avec un ensemble de données correspondant étroitement au mien. Cela fonctionne bien pour un nom de colonne, mais pas lorsque je boucle sur les noms de colonnes. De plus, comment placer chaque colonne nouvellement créée à côté (à droite de) la colonne sur laquelle l'opération est effectuée dans la boucle ?
Names Default To Here( 1 );
Clear Log();
dt = Open( "$SAMPLE_DATA/Semiconductor Capability.jmp" );
col_names = dt << Get Column Group( "Processes" );
ps = dt << Process Screening(
Process Variables( Eval( col_names ) ),
Spec Limits Dialog( "No (skip columns with no spec limits)" ),
);
ps << Color Out Of Spec Values (1);
t = ps << Get Window Title; //Show( t );
ps << Close Window;
dt << Clear Select << Clear Column Selection;
get_colored_cells = Function({dt, colname}, {Default Local},
colscript = Column(dt, colname) << Get Script;
l = Substitute(Name Expr(colscript), Expr(New Column()), List());
colored_cells = {};
Try(
colors = l["Color Cells"];
If(Type(colors[1]) == "List",
jmptrickery = 1;
,
jmptrickery = 0;
);
For Each({color}, colors,
If(jmptrickery,
Insert Into(colored_cells, color[2]);
,
Insert Into(colored_cells, color);
);
);
);
return(Matrix(colored_cells));
);
measColNames = dt << get column names(Numeric,Continuous ); show (measColNames[1]);
For( i = 1, i <= N Items( measColNames), i++,
rows = J( 1, N Rows( dt ), 0 );
colored_rows = get_colored_cells( dt, measColNames[i]);
rows[colored_rows] = 1;
dt << New Column( "PassFail"||measColNames[i], Numeric, Nominal, Values( rows ) );
);
//colname = "NPN1";
///// for single column
/*rows = J(1, N Rows(dt), 0);
colored_rows = get_colored_cells(dt, colname);
rows[colored_rows] = 1;
dt << New Column("result", Numeric, Nominal, Values(rows));*/
Re : Comment obtenir le numéro de ligne des cellules colorées dans une colonne et lui attribuer une balise (par exemple « 1 ») dans une colonne nouvellement créée ?Cela donne une idée de la façon dont vous pouvez gérer la situation pour une colonne
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
a = {1, 3, 5};
b = {2, 4, 6};
c = {7, 8, 9};
:height << color cells({{"Red", a}, {"blue", b}, {"yellow", c}});
:weight << color cells({{"Red", a}});
:age << color cells({{"Red", a}, {"blue", b}});
get_colored_cells = Function({dt, colname}, {Default Local},
colscript = Column(dt, colname) << Get Script;
l = Substitute(Name Expr(colscript), Expr(New Column()), List());
colored_cells = {};
Try(
colors = l["Color Cells"];
If(Type(colors[1]) == "List",
jmptrickery = 1;
,
jmptrickery = 0;
);
For Each({color}, colors,
If(jmptrickery,
Insert Into(colored_cells, color[2]);
,
Insert Into(colored_cells, color);
);
);
);
return(Matrix(colored_cells));
);
colname = "age";
// for single column
rows = J(1, N Rows(dt), 0);
colored_rows = get_colored_cells(dt, colname);
rows[colored_rows] = 1;
dt << New Column("result", Numeric, Nominal, Values(rows));
vous pouvez ensuite créer une colonne supplémentaire pour colorer chaque colonne lorsque vous effectuez une boucle dessus