So erstellen Sie ein JMP-Skript, um ein neues Fenster für die Benutzereingabe zu erstellen und einer Spalte Werte basierend auf einer anderen Spalte zuzuweisenHi,
Ich hänge an einem bestimmten Teil meines JMP-Skripts fest und hoffe, dass ich Hilfe von anderen Augen bekomme.
Ich habe einen Datensatz, der so aussieht, aber mit viel mehr Kategorien, jede mit längeren Namen.

Ich möchte eine weitere Spalte mit numerischen Werten basierend auf der angegebenen Spalte erstellen. Dieses Produkt muss vollständig automatisiert sein, mit einem Popup-Fenster, in dem jede der aufgeführten Kategorien aufgeführt ist, mit Zahlenbearbeitungsfeldern, in die der Benutzer die numerischen Werte eingeben kann, die einer Kategorie entsprechen. Zum Beispiel:
Popup-Fensterbox: Neues Fenster mit allen Eingabeaufforderungen in der Popup-Fensterbox.
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 zu diesem Beitrag hochgeladen. Wobei ich Hilfe brauche ist in roter Text unter. Ich habe Probleme beim Zuweisen des i-ten Werts in der for-Schleife, basierend auf Benutzereingaben und entsprechend der i-ten eindeutigen Kategorie in der Liste. unique_char , an die i-te Position in der initialisierten numerischen Liste, num_liste , 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>Die Ergebnisse daraus werden die automatisierte und benutzerfreundliche Version der Verwendung der folgenden bedingten Logik sein, um Spalte 2 basierend auf den Kategorien von Spalte 1 zu erstellen.

DatentabelleBetreff: So erstellen Sie ein JMP-Skript, um ein neues Fenster für die Benutzereingabe zu erstellen, das einer Spalte Werte basierend auf einer anderen Spalte zuweistIch verwende << Set Function mit dem Nummernbearbeitungsfeld, um die Werte in das assoziative Array unique_aa zu erhalten. 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 mit Eval Insert, Eval Expr, Parse und Substitute in einen anderen ein . Und wenn du Formel haben willst
Betreff: So erstellen Sie ein JMP-Skript, um ein neues Fenster für die Benutzereingabe zu erstellen, das einer Spalte Werte basierend auf einer anderen Spalte zuweistHier ist ein kleines Skript, das ich zusammengestellt habe - nicht möchten Sie vielleicht einen optionalen Selektor, um die neue Spalte numerisch zu machen (hier lasse ich es einfach als Zeichen).
Sie müssen einen neuen Spaltennamen eingeben und es wird überprüft, ob der neue Name derzeit in der Datentabelle vorhanden ist (ich weiß, dass JMP keine Spalte überschreibt, aber es kann immer noch 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 die Benutzereingabe zu erstellen, das einer Spalte Werte basierend auf einer anderen Spalte zuweistHast du das in Betracht gezogen? Spalten > Rekodieren Plattform?Könnte eine gute Low-Tech-Methode sein, um zu tun, was Sie wollen.
Betreff: So erstellen Sie ein JMP-Skript, um ein neues Fenster für die Benutzereingabe zu erstellen, das einer Spalte Werte basierend auf einer anderen Spalte zuweistAuf jeden Fall - darüber habe ich nachgedacht, bevor ich stecken geblieben bin. Aber ich möchte eine Anwendung für Leute haben, die die JMP-Schnittstelle nicht sehr gut kennen.