Envoyer la valeur de la case à cocher à la dernière ligne d'une colonne spécifiéeL'utilisateur sélectionne un point sur un graphique. Le script est ensuite exécuté lorsque l'utilisateur sélectionne une option dans une case à cocher modale, "début" ou "fin". Le script copie la ligne de données sélectionnée dans une autre table, dt2. Cette partie fonctionne bien. Je n'arrive pas à ajouter la valeur sélectionnée dans la case à cocher dans la colonne "position" de la même ligne qui vient d'être ajoutée par la déclaration concaténation.
//Modal (non-Modal) Retrieval in OK button
//Initialize
cycleList = {"start", "end"};
rb_c = 0;
New Window( "Select start/end", <<MODAL></MODAL>
Re: Envoyer la valeur de la case à cocher à la dernière ligne d'une colonne spécifiéeBonjour Ian,
Cela fonctionne bien! Merci beaucoup. Le script économisera des heures et des heures de transcription des points de données de début et de fin de cycle.
À votre santé!
Re: Envoyer la valeur de la case à cocher à la dernière ligne d'une colonne spécifiéeVous pouvez éviter la dépendance JMP 13 en utilisant une boucle:
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";
);
En ce qui concerne "plusieurs lignes ne seront pas sélectionnées par l'utilisateur", alors, si j'ai bien compris, il est certainement possible qu'elles le puissent. . .
Re: Envoyer la valeur de la case à cocher à la dernière ligne d'une colonne spécifiéeBonjour Ian,
Utilisation de JMP 11. Le graphique à partir duquel il choisit un seul point de données est présenté à l'utilisateur. Exécutez le script pour définir si le point est le début ou la fin d'un cycle. J'ai besoin que toute la ligne de données soit sauvegardée dans une autre table avec la nouvelle colonne "position" définissant si cette ligne est un "début" ou une "fin" du cycle. Plusieurs lignes ne seront pas sélectionnées par l'utilisateur. Vous trouverez ci-joint un exemple de «graphique 2» illustrant la perte de poids en fonction du temps. Le code copiera et enregistrera la ligne sélectionnée par l'utilisateur. Cependant, je ne peux pas sembler intercepter la sélection de l'utilisateur (début ou fin) et enregistrer cette valeur dans la colonne "position" de cette ligne.
À votre santé
Re: Envoyer la valeur de la case à cocher à la dernière ligne d'une colonne spécifiéeLe code ne fonctionnant pas pour moi, je vous propose donc une alternative sur laquelle vous pourrez peut-être vous appuyer (nécessite JMP 13 en raison de l'indexation de la table):
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";
);
Vous aviez peut-être une bonne raison de le concevoir comme vous l'avez fait, mais il semble que définir un début et une fin le rend plus compliqué et sujet aux erreurs que de définir une plage (c'est-à-dire un cycle complet).