Invia il valore della casella di controllo all'ultima riga di una colonna specificataL'utente seleziona un punto su un grafico. Lo script viene quindi eseguito dove l'utente seleziona un'opzione in una casella di controllo modale, "start" o "end". Lo script copia la riga di dati selezionata su un'altra tabella, dt2. Questa parte funziona bene. Non riesco a aggiungere il valore selezionato nella casella di controllo nella colonna denominata "posizione" per la stessa riga appena aggiunta dall'istruzione di concatenazione.
//Modal (non-Modal) Retrieval in OK button
//Initialize
cycleList = {"start", "end"};
rb_c = 0;
New Window( "Select start/end", <<MODAL></MODAL>
Ri: Invia il valore della casella di controllo all'ultima riga di una colonna specificataCiao Ian,
Funziona bene! Grazie mille. Lo script salverà ore e ore di trascrizione dei punti di dati di inizio e fine del ciclo.
Saluti!
Ri: Invia il valore della casella di controllo all'ultima riga di una colonna specificataÈ possibile evitare la dipendenza da JMP 13 utilizzando un ciclo:
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";
);
Per quanto riguarda "più righe non saranno selezionate dall'utente", quindi, se ho capito correttamente, è certamente possibile che possano farlo. . .
Ri: Invia il valore della casella di controllo all'ultima riga di una colonna specificataCiao Ian,
Utilizzo di JMP 11. L'utente viene presentato con il grafico da cui sceglie un singolo punto di dati, eseguire lo script per definire se il punto è l'inizio o la fine di un ciclo. Ho bisogno dell'intera riga di dati salvati su un'altra tabella con la nuova colonna "posizione" che definisce se quella riga è un "inizio" o "fine" del ciclo. Più righe non saranno selezionate dall'utente. In allegato c'è un esempio di "grafico 2" che mostra la perdita di peso rispetto al tempo. Il codice copia e salva la riga selezionata dall'utente, tuttavia, non riesco a intrappolare la selezione dell'utente (inizio o fine) e salvare quel valore nella colonna "posizione" per quella riga.
Saluti
Ri: Invia il valore della casella di controllo all'ultima riga di una colonna specificataIl codice non è stato eseguito per me, quindi offro un'alternativa che potresti essere in grado di creare (richiede JMP 13 a causa dell'abbonamento della tabella):
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";
);
Forse hai avuto un buon motivo per progettarlo come hai fatto tu, ma sembra che la definizione di un inizio e di una fine lo rendano più complicato e soggetto a errori rispetto alla definizione di un intervallo (ovvero, un intero ciclo).