So erstellen Sie ein JMP-Skript, um ein neues Fenster für Benutzereingaben zu erstellen und einer Spalte basierend auf einer anderen Spalte Werte zuzuweisenHallo,
Ich stecke bei einem bestimmten Teil meines JMP-Skripts fest und hoffe auf Hilfe aus anderen Augen.
Ich habe einen Datensatz, der so aussieht, aber viel mehr Kategorien mit jeweils längeren Namen enthält.

Ich möchte basierend auf der angegebenen Spalte eine weitere Spalte mit numerischen Werten erstellen. Dieses Produkt muss vollständig automatisiert sein, mit einem Popup-Fenster mit jeder aufgelisteten Kategorie und Zahlenbearbeitungsfeldern, in die der Benutzer die numerischen Werte eingeben kann, die einer Kategorie entsprechen. Zum Beispiel:
Popup-Fenster: Neues Fenster mit allen Eingabeaufforderungen im Popup-Fenster.
Geben Sie den Wert ein, der A entspricht: ___1___ Geben Sie den Wert ein, der B entspricht: ___2___ Geben Sie den Wert ein, der C entspricht: ___3___ Geben Sie den Wert ein, der D entspricht: ___4___ Geben Sie den Wert ein, der E entspricht: ___5___ |
Die resultierende Datentabelle sollte wie folgt aussehen:

Unten ist das JMP-Skript, das ich gerade habe. Ich habe auch die JMP-Datei in diesen Beitrag hochgeladen. Wobei ich Hilfe benötige, steht hier roter Text unten. Ich habe Probleme beim Zuweisen des i-ten Werts in der for-Schleife, der auf Benutzereingaben basiert und der i-ten eindeutigen Kategorie in der Liste entspricht. unique_char , an die i-te Position in der initialisierten numerischen Liste, num_list , die später in der nächsten for-Schleife zum Erstellen der Spalte 2 verwendet wird (am Ende des JMP-Skripts unten).
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>Das Ergebnis wird die automatisierte und benutzerfreundliche Version der Verwendung der folgenden bedingten Logik sein, um Spalte 2 basierend auf den Kategorien von Spalte 1 zu erstellen.

Qualitäts- und VerfahrenstechnikBetreff: So erstellen Sie ein JMP-Skript, um ein neues Fenster für Benutzereingaben zu erstellen und einer Spalte Werte basierend auf einer anderen Spalte zuzuweisenSicherlich – das ist etwas, worüber ich nachgedacht habe, bevor ich feststeckte. Aber ich möchte eine Anwendung für Leute haben, die die JMP-Schnittstelle nicht so gut kennen.
Betreff: So erstellen Sie ein JMP-Skript, um ein neues Fenster für Benutzereingaben zu erstellen und einer Spalte Werte basierend auf einer anderen Spalte zuzuweisenHaben Sie darüber nachgedacht? Spalten > Neu kodieren Plattform?Könnte eine gute Low-Tech-Methode sein, um das zu tun, was Sie wollen.
Betreff: So erstellen Sie ein JMP-Skript, um ein neues Fenster für Benutzereingaben zu erstellen und einer Spalte Werte basierend auf einer anderen Spalte zuzuweisenHier ist ein kleines Skript, das ich zusammengestellt habe – vielleicht möchten Sie einen optionalen Selektor, um die neue Spalte numerisch zu machen (hier belasse ich es einfach als Zeichen).
Sie müssen einen neuen Spaltennamen eingeben und es gibt eine Prüfung, die nicht ausgeführt wird, wenn der neue Name derzeit in der Datentabelle vorhanden ist (ich weiß, dass JMP eine Spalte nicht überschreibt, aber es kann trotzdem verwirrend sein).
/* 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>Betreff: So erstellen Sie ein JMP-Skript, um ein neues Fenster für Benutzereingaben zu erstellen und einer Spalte Werte basierend auf einer anderen Spalte zuzuweisenIch verwende << Set Function mit dem Zahlenbearbeitungsfeld, um die Werte in das assoziative Array „unique_aa“ zu übertragen. Verwenden Sie dann dieses assoziative Array, um die benötigte Formelspalte zu erstellen, nachdem Sie das modale Fenster geschlossen haben.
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>
Informationen zu Eval(EvalExpr()) finden Sie unter Fügen Sie einen Ausdruck in einen anderen ein, indem Sie Eval Insert, Eval Expr, Parse und Substitute verwenden . Und wenn Sie Formel haben möchten