¿Cómo obtener el número de fila de celdas coloreadas en una columna y asignarle una etiqueta (por ejemplo, "1") en una columna recién creada?Utilicé Color Out of Spec Values() para colorear los errores de especificación en mis datos de medición. Tengo varias columnas con datos de medición y los valores fuera de especificación de cada columna se colorean según la especificación de cada columna de parámetros.
Para cada columna de parámetros quiero crear una columna adyacente que asigne un "1" cuando la celda esté coloreada, de lo contrario "0".
¿Cómo lograr esto a través de JSL?
Automatización y scriptingVentanasRe: ¿Cómo obtener el número de fila de celdas coloreadas en una columna y asignarle una etiqueta (por ejemplo, "1") en una columna recién creada?Vaya, gran idea: ¡a través del script de la columna!
Lo bueno de JMP:
Las soluciones alternativas : )
Lo no tan bueno de JMP:
Las soluciones alternativas para las soluciones alternativas.
Para obtener directamente los valores fuera de especificación sin el desvío a través del color, vote: :folded_hands: está dentro de la especificación (valor)
Re: ¿Cómo obtener el número de fila de celdas coloreadas en una columna y asignarle una etiqueta (por ejemplo, "1") en una columna recién creada?No use el bucle For y use << mover columnas seleccionadas para mover sus columnas después de la columna especificada
Ver más...
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: ¿Cómo obtener el número de fila de celdas coloreadas en una columna y asignarle una etiqueta (por ejemplo, "1") en una columna recién creada?@jthi Gracias. He adaptado tu script para usarlo con un conjunto de datos que coincida estrechamente con el mío. Funciona bien para un nombre de columna, pero no cuando hago un bucle sobre los nombres de columnas. Además, ¿cómo coloco cada columna recién creada al lado (a la derecha) de la columna en la que se realiza la operación dentro del bucle?
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: ¿Cómo obtener el número de fila de celdas coloreadas en una columna y asignarle una etiqueta (por ejemplo, "1") en una columna recién creada?Esto da una idea de cómo se puede manejar la situación para una columna.
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));
Luego puedes crear columnas adicionales para colorear cada columna cuando pases sobre ellas.