Dynamisches Dialogfeld zur Auswahl verschiedener BeobachtungenIch habe folgende Daten. Ich möchte ein Dialogfeld erstellen, das verschiedene Arten von Spielen anzeigt, die in der Spielespalte verfügbar sind, und dem Benutzer die Möglichkeit gibt, den Typ jedes Spiels auszuwählen. Sobald der Benutzer den Typ für jedes Spiel ausgewählt und auf „OK“ geklickt hat, sollte die ursprüngliche Tabelle aktualisiert und eine neue Spalte mit dem Spieltyp für jedes Spiel hinzugefügt werden. Wenn möglich, sollte ein Spiel, das der Benutzer für einen bestimmten Spieltyp ausgewählt hat, aus der Liste der Spiele im Dialogfeld ausgeblendet werden, um Duplikate zu vermeiden.
Unten ist meine ursprüngliche und endgültige Tabelle. Das interaktive Dialogfeld sollte wie im beigefügten Bild aussehen, in dem der Benutzer die für den jeweiligen Spieltyp verfügbaren Spieloptionen per Drag-and-Drop auswählen kann. Die Schaltfläche „OK“ sollte erst aktiviert werden, wenn alle Spiele ausgewählt sind.
Bitte helfen Sie mir, dafür ein .jsl-Skript zu erstellen.
Originaltisch:
| Name | Spiel |
| A | Fußball |
| A | Schach |
| A | Badminton |
| B | Fußball |
| C | Schach |
| B | Tischtennis |
| D | Nichts |
Finaltisch:
| Name | Spiel | Spiel Typ |
| A | Fußball | draussen |
| A | Schach | drinnen |
| A | Badminton | drinnen |
| B | Fußball | draussen |
| C | Schach | drinnen |
| B | Tischtennis | drinnen |
| D | Nichts | Unzutreffend |
Danke 


Betreff: Dynamisches Dialogfeld zur Auswahl verschiedener BeobachtungenDanke @gzmorgan0
Schätze deine Hilfe.
Ich verwende JMP 14.Betreff: Dynamisches Dialogfeld zur Auswahl verschiedener Beobachtungen@Rajat ,
Im Anhang finden Sie ein geändertes Skript. Zu beachtende Punkte:
- Verwendet eine ComboBox für die Liste der Kategorieoptionen, die durch eine skriptinterne Liste festgelegt wird.
- Zuweisungen erfolgen durch Auswahl aus der Quellliste, der aktuellen Kategorie in der ComboBox und durch Klicken auf die Schaltfläche „Zuweisen“.
- Die Aufgabe wird als Spielname > Kategorie aufgeführt
- Damit die Tabelle schrittweise aktualisiert werden kann, wurde eine Schaltfläche „Aktualisieren“ hinzugefügt
- Die Quellliste wird nur für Spiele erstellt, denen kein Spieltyp zugewiesen wurde
- Die Aktionen zum Entfernen und Schreiben in die Tabelle mussten geändert werden. Jetzt enthalten die Elemente in lb1, der Zuweisungs-ListBox, zwei Informationen in einer einzigen Zeichenfolge. Die Funktion Word(n,string,delimiter) wird verwendet, um die relevanten Informationen zu extrahieren.
Der Screenshot zeigt, dass eine Zuweisung vorgenommen wurde. Wenn der Benutzer in dieser Ansicht auf Zuweisen drückt, werden Badminton und Fußball als Outdoor zugewiesen.
Diese Schnittstelle reduziert die Anzahl der Variablen für Anzeigefelder.Um eine nützliche Schnittstelle zu erstellen, müssen Sie die Anwendung, Anforderungen und Verwendung verstehen, einige Grundlagen kennen oder Beispielcode finden, der Ihren Wünschen nahe kommt, und diesen verstehen. Beachten Sie, dass es viele Alternativen zu diesem Skript gibt.Viel Glück!

JSL für das Dialoglayout. Das vollständige Skript ist beigefügt.
//--Dialog
usr = New Window("Using List Boxes", <<MODAL></MODAL>Betreff: Dynamisches Dialogfeld zur Auswahl verschiedener Beobachtungen@Rajat ,
Sie haben nicht erwähnt, welche JMP-Version Sie verwenden.Wenn JMP 14, wählen Sie im JMP-Hauptmenü aus Hilfe > Bücher > JMP Scripting Guide . Dies ist die PDF-Version eines gebundenen Buches. In Kapitel 11 beginnt ab Seite 517 der Abschnitt „Benutzerdefinierte Fenster erstellen“.Dies ist eine sehr gute Quelle zum Lernen.
Auch Hilfe > Skriptindex > Drücken Sie auf der oberen grauen Schaltfläche und wählen Sie aus Präsentationsboxen .Wählen Sie auf der linken Seite einen Anzeigefeld-Konstruktor aus und sehen Sie sich auf der rechten Seite die Syntax an. Dann gibt es ein oder mehrere einfache Beispielskripte, die Sie ausführen oder kopieren und einfügen und Ihr eigenes Skript erstellen können, um zu erfahren, wie jeder Konstruktor funktioniert.Ich schlage vor, dass Sie nachschlagen: ButtonBox , ListBoxBox die Konstrukteure sind. PanelBox , LineUpBox , ListBox (HListBox, VListBox) sind Container, die zum Anordnen des Layouts des Dialogs verwendet werden.
Um wirklich zu lernen, wie man Skripte verfasst, müssen Sie die Tools wirklich kennen, und diese Lernreise kann einige Zeit dauern.Viele Skripter lernen jedoch, indem sie vorhandene Skripte verwenden, lesen, ausführen und an ihre Bedürfnisse anpassen.
Da Sie sagten, dass dies viele Variablen erfordern würde, gehe ich davon aus, dass Sie mehr als drei Kategorien benötigen (Indoor, Outdoor, Nothing). Wie ich in meinem letzten Beitrag erwähnt habe, gibt es dafür viele Möglichkeiten und ich habe Code zum Kopieren und Einfügen verwendet.Wenn Sie viele Kategorien haben, würde ich mein Skript mit dem von bereitgestellten Beispiel ändern @pmroz . Ich hätte eine ComboBox verwendet, um aus einer Liste von Kategorien auszuwählen, und nur ein Schaltflächenfeld (Zuweisen) und nur ein Zuweisungsfeld.Wenn ich Zeit habe, werde ich mein Skript ändern und es anhängen.
JMP in JMP Scripting, 2 Und JSL Companion, Anwendungen der JMP-Skriptsprache, 2. Auflage sind zwei weitere Bücher, die Ihnen beim Erlernen von JSL nützlich sein könnten.
Betreff: Dynamisches Dialogfeld zur Auswahl verschiedener BeobachtungenDanke @gzmorgan0
Ich suche nur nach dieser Lösung.
Ich versuche den Code zu verstehen. Es sieht so aus, als müssten wir so viele Variablen erstellen. Können Sie mir bitte eine gute Video-Tutorial-Reihe (vorzugsweise) oder ein Buch vorschlagen, in dem ich lernen kann, interaktive Dialogfelder mit JSL zu erstellen? Ich bin ganz am Anfang der Erstellung dieser Dialogfelder.
Danke 

Betreff: Dynamisches Dialogfeld zur Auswahl verschiedener Beobachtungen@Rajat ,
Die meisten JMP-Skriptsprachen (JSL), Objekte und Funktionen zum Erstellen benutzerdefinierter Dialoge zielen auf Tabellenspalten ab. Bedenken Sie, dass die in JMP integrierten Dialogfenster Spalten anfordern. Es gibt Objekte, die für die benutzerdefinierte Auswahl verwendet werden können, diese „Werte“-Objekte erfordern jedoch normalerweise mehr Programmierung.Beispielsweise verfügt ein ColListBox-Objekt über eine integrierte Drag-and-Drop-Schnittstelle: Ein Spaltenname kann auf eine andere ColListBox gezogen werden, und die Spaltennamen sind eindeutig.
JSL stellt zwar ListBox()-Objekte bereit, allerdings ist es nun die Aufgabe des Skripters, die Eindeutigkeit sicherzustellen. Je nachdem, wie Sie die Aufgabe codieren, müssen Sie beispielsweise dafür sorgen, dass Fußball nur eine Klassifizierung hat und der Name nur einmal verwendet wird.
Eine Methode besteht darin, keinen Dialog zu verwenden, sondern eine tabellarische Zusammenfassung eindeutiger Spiele und des Spieltyps zu erstellen, den Benutzer diese verkürzte Tabelle aktualisieren zu lassen und dann die Quelltabelle zu aktualisieren. Diese Methode ähnelt älteren Datenbankaktualisierungsschnittstellen.
Ich habe ein sehr einfaches und nicht so elegantes Skript (wiederholter Brute-Force-Code) angehängt, um die beschriebene Aufgabe abzuschließen.Ich habe es einfach gehalten, da Sie das Buch nicht gelesen haben.Die Skriptschnittstelle enthält eine Schaltfläche zum Entfernen, falls ein Spiel versehentlich für einen falschen Typ ausgewählt wurde.Anstatt eine Union-Funktion zu erstellen, damit die Liste der Spiele keine Duplikate enthält, und Funktionen, die sicherstellen, dass ein Spiel nicht sowohl als Indoor- als auch als Outdoor-Spiel klassifiziert wird, habe ich den Code erstellt, um das Spiel aus der Quellliste zu entfernen, sobald eine Kategorie ausgewählt wurde.
Sie sollten sich über das Assoziative Array, eine verschlüsselte Liste, ListBox, ButtonBox und Set Function() informieren.
Unten sehen Sie einen Screenshot des Dialogs und des Dialogteils des Skripts. Das vollständige Skript ist beigefügt.Beachten Sie, dass dies mit einer DataFilterBox möglich ist, ListBox() jedoch einfacher zu verwenden ist. Übrigens wurde dies auf JMP13 und 14 getestet.

//--Dialog
usr = New Window("Using List Boxes", <<MODAL></MODAL>Betreff: Dynamisches Dialogfeld zur Auswahl verschiedener BeobachtungenHallo @pmroz
Danke für Ihre Antwort.
In meinem aktuellen Datensatz habe ich 1000 Spiele mit 25 einzigartigen Spielen und außerdem nur drei Kategorien: 1.Indoor 2.Outdoor 3.Nicht anwendbar. Bei diesem Ansatz muss ich für jeweils 1000 Spiele einen Spieltyp auswählen. Ich habe es auch mit einem einzigartigen Spiel versucht, aber es hat nicht funktioniert.
Können wir ein Fenster haben, das nur eindeutige Werte von Spielen anzeigt? Außerdem sollte es eine Mehrfachauswahl von Spielen ermöglichen und dann den Spieltyp für alle Mehrfachauswahlen von Spielen auswählen, da die Auswahl des Spieltyps für jeden einzelnen Spielwert mühsam ist, wenn die Anzahl der einzelnen Spiele zunimmt.Betreff: Dynamisches Dialogfeld zur Auswahl verschiedener BeobachtungenHier ist eine Lösung, die eine Tischbox mit einer Col-Box verwendet.Passen Sie es an Ihre Spieltypen an.
dt = New Table( "Games", Add Rows( 7 ),
New Column( "Name", Character, "Nominal",
Set Values( {"A", "A", "A", "B", "C", "B", "D"} ) ),
New Column( "Game", Character( 16 ), "Nominal", Set Values(
{"Football", "chess", "Badminton", "Football", "Chess", "Table Tennis", "Nothing"} ) ),
new column("Game Type", Character, "Nominal")
);
game_list = dt:game << get values;
ngames = nitems(game_list);
selected_type = {};
type_list = {"No choice made", "Outdoor", "Indoor", "Nothing"};
game_type_cb = {};
game_type_colb = col box("Game Type");
for (i = 1, i <= ngames, i++,
selected_type[i] = "No choice made";
game_type_cb[i] = combo box(type_list);
game_type_colb << append(game_type_cb[i]);
);
nw = new window("Game Type Setting",
panel box("Select game type for each game",
tb = table box(
string col box("Game", game_list),
game_type_colb
),
),
panel box("Actions",
hlistbox(
okb = button box("OK",
for (i = 1, i <= ngames, i++,
selected_type[i] = game_type_cb[i] << get selected();
dt:game type[i] = selected_type[i];
);
show(selected_type);
nw << close window;
),
canb = button box("Cancel",
nw << close window;
),
)
)
);