Comment créer un script JMP pour créer une nouvelle fenêtre d'entrée utilisateur attribuant des valeurs à un col en fonction d'un autre colSalut,
Je suis bloqué sur une partie spécifique de mon script JMP et j'espère obtenir de l'aide d'un autre regard.
J'ai un ensemble de données qui ressemble à ceci, mais avec beaucoup plus de catégories, chacune avec des noms plus longs.

Je veux créer une autre colonne, avec des valeurs numériques, basée sur la colonne donnée. Ce produit doit être entièrement automatisé, avec une fenêtre contextuelle avec chacune des catégories répertoriées, avec des zones d'édition de nombres dans lesquelles l'utilisateur peut saisir les valeurs numériques qui correspondront à une catégorie. Par exemple:
Boîte de fenêtre contextuelle : nouvelle fenêtre avec toutes les invites dans la boîte de fenêtre contextuelle.
Saisissez la valeur correspondant à A : ___1___ Saisissez la valeur correspondant à B : ___2___ Saisissez la valeur correspondant à C : ___3___ Saisissez la valeur correspondant à D : ___4___ Saisissez la valeur correspondant à E : ___5___ |
Le tableau de données résultant devrait ressembler à ceci :

Ci-dessous se trouve le script JMP que j'ai en ce moment. J'ai également téléchargé le fichier JMP dans ce post. Ce pour quoi j'ai besoin d'aide est dans texte rouge au dessous de. J'ai du mal à attribuer la ième valeur dans la boucle for, en fonction de l'entrée de l'utilisateur et correspondant à la ième catégorie unique dans la liste, unique_char , à la ième position dans la liste numérique initialisée, liste_num , qui sera utilisé plus tard dans la prochaine boucle for pour créer la colonne 2 (à la fin du script JMP ci-dessous).
dt = Current Data Table();
//get the unique character variable list
Names Default To Here( 1 );
col9 = Column(dt, "Column 1");
unique_char = Associative Array(col9) << get keys; // unique_char = {"A", "B", "C", "D", "E"}
//get n items in character variable list
nuniquechar = N Items(unique_char); //will be 5, if categories are A, B, C, D, E
//initalize number list
num_list = {};
//create new window to create multiple number edit boxes
nw = New Window( "Set Values",
<<MODAL> // HELP:
// name a numeric variable on each iteration that will be the holder of a numeric edit box
// put the resulting ith entry into the num_list
num_list[i] = number edit box(),
// number box default is null/missing. If no input, place a missing value in the num_list
)
);<BR /><BR />// TO DO: <BR />// Create new column assigning the num_list values to <BR />// the corresponding rows based the unique character value. <BR />// Pseudo-code: <BR />// for(i in 1:nuniquechar)<BR />// if :column 1 = unique_char[i], num_list[i]<BR />//<BR />//</MODAL>Les résultats en seront la version automatisée et conviviale de l'utilisation de la logique conditionnelle suivante pour rendre la colonne 2 basée sur les catégories de la colonne 1.

Tableau de donnéesRe: Comment créer un script JMP pour créer une nouvelle fenêtre pour l'entrée utilisateur attribuant des valeurs à un col en fonction d'un autre colJ'utilise << Définir la fonction avec la zone d'édition de nombre pour obtenir les valeurs du tableau associatif unique_aa. Ensuite, en utilisant ce tableau associatif pour construire la colonne de formules nécessaire, après avoir fermé la fenêtre modale.
Names Default To Here(1);
dt = Current Data Table();
//get the unique character variable list
col9 = Column(dt, "Column 1");
unique_char = Associative Array(col9) << get keys;
nuniquechar = N Items(unique_char); //will be 5, if categories are A, B, C, D, E
unique_aa = Associative Array(unique_char, Repeat({.}, nuniquechar)); //repeat to initialize values as missing
//create new window to create multiple number edit boxes
vlbExpr = V List Box();
For(i = 1, i <= nuniquechar, i++,
Insert Into(vlbExpr, Text Box("Number for " || Char(unique_char[i]) || ":")); //i.e. "Number for A:"
Eval(
Eval Expr(Insert Into(vlbExpr, Number Edit Box(., <<SET function=""></SET>
Pour plus d'informations sur Eval(EvalExpr()) voir Insérez une expression dans une autre à l'aide d'Eval Insert, Eval Expr, Parse et Substitute . Et si tu veux avoir la formule
Re: Comment créer un script JMP pour créer une nouvelle fenêtre pour l'entrée utilisateur attribuant des valeurs à un col en fonction d'un autre colVoici un petit script que j'ai mis en place - vous ne voudrez peut-être pas qu'un sélecteur facultatif rende la nouvelle colonne numérique (ici, je le laisse simplement comme caractère).
Vous devez entrer un nouveau nom de colonne et il y a une vérification à ne pas exécuter si le nouveau nom existe actuellement dans la table de données (je sais que JMP n'écrasera pas une colonne, mais cela peut toujours prêter à confusion).
/* recode */
self = New Namespace();
Show( self << Get Name );
self:table = Current Data Table();
self:column = Insert( {}, self:table << Get Selected Columns );
self:column = self:column[1] << Get Name;
Show( self:column );
self:values = Associative Array( Column( self:table, self:column ) ) << Get Keys;
self:string list = {};
For( i = 1, i <= N Items( self:values ), i++,
Insert Into( self:string list, Char( i ) )
);
Eval( Eval Expr(
win = New Window( "Set Values",
<<MODAL></MODAL>Re: Comment créer un script JMP pour créer une nouvelle fenêtre pour l'entrée utilisateur attribuant des valeurs à un col en fonction d'un autre colAvez-vous envisagé la Cols > Recoder Plate-forme?Peut-être un bon moyen low-tech de faire ce que vous voulez.
Re: Comment créer un script JMP pour créer une nouvelle fenêtre pour l'entrée utilisateur attribuant des valeurs à un col en fonction d'un autre colBien sûr, c'est quelque chose que j'ai pensé faire avant de me retrouver coincé. Mais je souhaite avoir une application pour les personnes qui ne connaissent pas très bien l'interface JMP.