Senden Sie den Wert des Kontrollkästchens an die letzte Zeile einer angegebenen SpalteDer Benutzer wählt einen Punkt in einem Diagramm aus. Das Skript wird dann ausgeführt, wenn der Benutzer eine Option in einem modalen Kontrollkästchen "Start" oder "Ende" auswählt. Das Skript kopiert die ausgewählte Datenzeile in eine andere Tabelle, dt2. Dieser Teil funktioniert gut. Ich kann den in dem Kontrollkästchen ausgewählten Wert nicht an die Spalte "Position" für die gleiche Zeile anhängen, die gerade von der verketteten Anweisung hinzugefügt wurde.
//Modal (non-Modal) Retrieval in OK button
//Initialize
cycleList = {"start", "end"};
rb_c = 0;
New Window( "Select start/end", <<MODAL></MODAL>
Re: Sende den Wert des Kontrollkästchens an die letzte Zeile einer angegebenen SpalteHi Ian,
Das funktioniert gut! Vielen Dank. Das Skript speichert Stunden und Stunden für das Transkribieren der Datenpunkte für den Beginn und das Ende des Zyklus.
Prost!
Re: Sende den Wert des Kontrollkästchens an die letzte Zeile einer angegebenen SpalteSie können die JMP 13-Abhängigkeit vermeiden, indem Sie eine Schleife verwenden:
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";
);
In Bezug auf 'Mehrere Zeilen werden vom Benutzer nicht ausgewählt', dann ist es durchaus möglich, dass ich sie richtig verstanden habe. . .
Re: Sende den Wert des Kontrollkästchens an die letzte Zeile einer angegebenen SpalteHi Ian,
Verwendung von JMP 11. Dem Benutzer wird das Diagramm angezeigt, aus dem er einen einzelnen Datenpunkt auswählt. Führen Sie das Skript aus, um festzulegen, ob der Punkt Anfang oder Ende eines Zyklus ist. Ich brauche die gesamte Datenzeile, die in einer anderen Tabelle gespeichert ist, wobei die neue Spalte "Position" definiert, ob diese Zeile "Anfang" oder "Ende" des Zyklus ist. Mehrere Zeilen werden vom Benutzer nicht ausgewählt. Beigefügt ist ein Beispiel "Diagramm 2", das den Gewichtsverlust gegen die Zeit zeigt. Der Code kopiert und speichert die Zeile, die der Benutzer ausgewählt hat. Ich kann jedoch die Auswahl des Benutzers (Start oder Ende) nicht einfangen und diesen Wert in der Spalte "Position" für diese Zeile speichern.
Prost
Re: Sende den Wert des Kontrollkästchens an die letzte Zeile einer angegebenen SpalteDer Code lief nicht für mich, daher biete ich eine Alternative an, auf die Sie möglicherweise aufbauen können (erfordert JMP 13 aufgrund der Tabellensubskription):
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";
);
Vielleicht hatten Sie einen guten Grund, es so zu gestalten, wie Sie es gemacht haben, aber es scheint, dass die Definition eines Anfanges und eines Endes es komplizierter und fehleranfälliger macht, als einen Bereich (dh einen ganzen Zyklus) zu definieren.