Enviar el valor de la casilla de verificación a la última fila de una columna específicaEl usuario selecciona un punto en un gráfico. Luego, el script se ejecuta donde el usuario selecciona una opción en una casilla de verificación modal, "inicio" o "fin". El script copia la fila de datos seleccionada en otra tabla, dt2. Esta parte funciona bien. Parece que no puedo agregar el valor seleccionado en la casilla de verificación en la columna llamada "posición" para la misma fila que acaba de agregarse con la declaración de concatenación.
//Modal (non-Modal) Retrieval in OK button
//Initialize
cycleList = {"start", "end"};
rb_c = 0;
New Window( "Select start/end", <<MODAL></MODAL>
Re: Enviar el valor de la casilla de verificación a la última fila de una columna específicaHola, Ian,
¡Esto funciona bien! Muchas gracias. El script ahorrará horas y horas de transcripción de los puntos de datos de inicio y fin del ciclo.
¡Aclamaciones!
Re: Enviar el valor de la casilla de verificación a la última fila de una columna específicaPuede evitar la dependencia JMP 13 utilizando un bucle:
NamesDefaultToHere(1);
// Sample data
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// UI
win = NewWindow("Select Cycles",
rc = dt << Control Chart(
Sample Size( 1 ),
KSigma( 3 ),
Chart Col( :height, Run Chart( Show Center Line( 0 ) ) )
),
PanelBox("Define Cycle",
LineUpBox(NCol(2),
ButtonBox("Start Cycle", startScript),
ButtonBox("End Cysle", endScript)
)
)
);
// Make a copy of 'dt' with no rows
dt2 = Eval(dt << getScript);
dt2 << deleteRows(1::NRow(dt));
dt2 << setName((dt << getName)||" - Cycles");
// Add extra columns
dt2 << NewColumn("Row", Numeric, Ordinal);
dt2 << NewColumn("Cycle", Character);
// When 'Start Cycle' is pressed - If multiple rows are selected, take the first
startScript =
Expr(
r = dt << getSelectedRows;
dt2 << addRows(1);
for(c=1, c<=NCol(dt), c++, Column(dt2, c)[NRow(dt2)] = Column(dt, c)[r[1]]);
Column(dt2, "Row")[NRow(dt2)] = r[1];
Column(dt2, "Cycle")[NRow(dt2)] = "Start";
);
// When 'End Cycle' is pressed - If multiple rows are selected, take the first
endScript =
Expr(
r = dt << getSelectedRows;
dt2 << addRows(1);
for(c=1, c<=NCol(dt), c++, Column(dt2, c)[NRow(dt2)] = Column(dt, c)[r[1]]);
Column(dt2, "Row")[NRow(dt2)] = r[1];
Column(dt2, "Cycle")[NRow(dt2)] = "End";
);
Con respecto a 'el usuario no seleccionará varias filas', entonces, si lo he entendido correctamente, es posible que lo hagan. . .
Re: Enviar el valor de la casilla de verificación a la última fila de una columna específicaHola, Ian,
Utilizando JMP 11. Al usuario se le presenta el gráfico desde el que elige un único punto de datos, ejecute el script para definir si el punto es el inicio o el final de un ciclo. Necesito que se guarde toda la fila de datos en otra tabla con la nueva columna "posición" que define si esa fila es un "inicio" o "final" del ciclo. El usuario no seleccionará varias filas. Se adjunta un ejemplo del "cuadro 2" que muestra la pérdida de peso en función del tiempo. El código copiará y guardará la fila que el usuario seleccionó; sin embargo, parece que no puedo atrapar la selección del usuario (inicio o final) y guardar ese valor en la columna "posición" de esa fila.
Aclamaciones
Re: Enviar el valor de la casilla de verificación a la última fila de una columna específicaEl código no se ejecutó para mí, por lo que te ofrezco una alternativa en la que puedes construir (requiere JMP 13 debido a la tabla de suscripciones):
NamesDefaultToHere(1);
// Sample data
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// UI
win = NewWindow("Select Cycles",
rc = dt << Control Chart(
Sample Size( 1 ),
KSigma( 3 ),
Chart Col( :height, Run Chart( Show Center Line( 0 ) ) )
),
PanelBox("Define Cycle",
LineUpBox(NCol(2),
ButtonBox("Start Cycle", startScript),
ButtonBox("End Cysle", endScript)
)
)
);
// Make a copy of 'dt' with no rows
dt2 = Eval(dt << getScript);
dt2 << deleteRows(1::NRow(dt));
dt2 << setName((dt << getName)||" - Cycles");
// Add extra columns
dt2 << NewColumn("Row", Numeric, Ordinal);
dt2 << NewColumn("Cycle", Character);
// When 'Start Cycle' is pressed - If multiple rows are selected, take the first
startScript =
Expr(
r = dt << getSelectedRows;
dt2 << addRows(1);
dt2[NRow(dt2), 1::NCol(dt)] = dt[r[1],0];
dt2[NRow(dt2), "Row"] = r[1];
dt2[NRow(dt2), "Cycle"] = "Start";
);
// When 'End Cycle' is pressed - If multiple rows are selected, take the first
endScript =
Expr(
r = dt << getSelectedRows;
dt2 << addRows(1);
dt2[NRow(dt2), 1::NCol(dt)] = dt[r[1],0];
dt2[NRow(dt2), "Row"] = r[1];
dt2[NRow(dt2), "Cycle"] = "End";
);
Tal vez haya tenido una buena razón para diseñarlo de la manera que lo hizo, pero parece que definir un comienzo y un final hace que sea más complicado y propenso a errores que definir un rango (es decir, un ciclo completo).