Fehler beim Erstellen von Eingabeaufforderungen<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ich bin neu bei JMP und habe im Buch „Jump into JMP scripting“ schöne Beispiele zum Erstellen schöner Eingabeaufforderungen gefunden.
Ich weiß immer noch nicht, wie ich eine einfache Eingabeaufforderung erstelle und eine Teilmenge mit Skripten erstelle, die auf den Werten basiert, die ich aus dieser Eingabeaufforderung auswähle.
Die Eingabeaufforderung sollte Werte aus einer Zeichenspaltenvariablen „yearm“ „sammeln“. Ich möchte beispielsweise einen Diagrammersteller erstellen, der auf Jahres- und Monatswerten zwischen [201007, 201012] basiert.
Alle Kommentare sind willkommen. Vielen Dank im Voraus, dass Sie mir bei diesem Problem geholfen haben.
Fehlermeldung: Ungültiger Index (muss eine Zahl oder eine Liste von Zahlen sein){1} beim Zugriff oder bei der Auswertung von „Subscript“, Quarter[select1 << get]
Hier ist ein Code:
Summarize( Quarter= By( Column( dt, "yearm" ) ) );
nw = Neues Fenster( "Quartals auswählen",
hb = Panel Box( „Wähle Jahr“,
select1 = Listenfeld (quartal,
dt << Wo auswählen(
:yearm== Quarter[select1 << get] );
selRows = dt << Ausgewählte Zeilen abrufen;
)
),
Schaltflächenfeld( „OK“,
nw << Fenster schließen;
dt << Wo auswählen(
:yearm== Quarter[select1 << get]
);
/* Ausgewählte Zeilen werden in eine neue Tabelle unterteilt. */
dt << Subset( Output Table Name( "Chosen Quarters" ) );
)
);
Betreff: Fehler beim Erstellen von EingabeaufforderungenOk, ich werde es versuchen und antworten, wenn mein JMP auf 10 aktualisiert wird. Das Aktualisierungsmedium ist angekommen, wartet aber noch.
Vielen Dank, Sie sind hier wirklich ein Profi. Hoffentlich lerne ich auch etwas.
Betreff: Fehler beim Erstellen von EingabeaufforderungenAutsch! Dann wird Contains() schmerzhaft langsam sein. Ich schlage vor, den integrierten Datenfilter() als Teil der Eingabeaufforderung zu verwenden. Bei großen Tabellen geht es viel schneller.
Probieren Sie das folgende Beispiel in JMP 10 aus (scheint nicht so zu funktionieren wie in JMP 9). Die Auswahl und Unterteilung erfolgt nahezu augenblicklich für eine Tabelle mit 1 Million Zeilen (MacPro 8 x 2,8 GHz).
//Beispieltabelle
dt = Neuer Tisch ( "Groß" ,
Zeilen hinzufügen ( 1000000 ) ,
Neue Spalte ( "Quartal" , nominal , Formel ( 1 + 10 * Runden ( Zufällige Uniform () / 3 , 1 ) ) )
) ;
dt << Laufformeln () ;
Spalte ( "Quartal" ) << Formel löschen ;
//Prompt
df = dt << Datenfilter ( Säulen ( : Quartal ) ) ;
rdf = df << Bericht ;
rdf [ Gliederungsfeld ( 1 )] << Titel festlegen ( „Wählen Sie ein oder mehrere Quartale aus“ ) << anhängen (
Button-Box ( „Teilmenge erstellen“ ,
dt << Teilmenge ( Name der Ausgabetabelle ( „Ausgewählte Zeitalter“ ) ) ;
df << schließen , jetzt << schließen
)
) ;
//optionale Kostenanpassung: rdf[listbox(4)]<Betreff: Fehler beim Erstellen von Eingabeaufforderungen
Vielen Dank euch beiden für die wirklich guten Ratschläge, ich weiß das zu schätzen! Der Code funktioniert jetzt einwandfrei, ist jedoch bei Verwendung von 1,5 Millionen Zeilen etwas langsam.
Betreff: Fehler beim Erstellen von EingabeaufforderungenJa, die Funktion „Contains()“ ist hier eleganter. Ich erhalte jedoch eine Fehlermeldung, wenn ich im obigen Beispiel nur ein Element auswähle. Vielleicht weil alist_num [ select1 << Holen Sie sich ausgewählte Indizes ] Geben Sie dann eine Zahl anstelle einer Liste von Zahlen zurück.
Hier
dt << Wählen Sie „Wo“. ( enthält ( select1 << ausgewählt werden , verkohlen( : Alter) ) ) ;
funktioniert besser und sollte unabhängig davon funktionieren, ob :age ein Zeichen oder eine Zahl ist.
Betreff: Fehler beim Erstellen von EingabeaufforderungenEs gibt ein praktisches Konstrukt zum Durchsuchen einer Spalte mithilfe einer Liste mit dem enthält Funktion.Der folgende Code zeigt, wie man ihn verwendet:
dt = offen ( „$sample_data\big class.jmp“ ) ;
Zusammenfassen ( altersliste = Von ( Spalte ( dt , "Alter" ) ) ) ;
alist_num = {} ;
für ( ich = 1 , ich <= nitems ( altersliste ) , ich ++,
alist_num [ ich ] = Num ( altersliste [ ich ]) ;
) ;
jetzt = Neues Fenster ( „Alter wählen“ ,
hb = Panel-Box ( „Alter wählen“ ,
select1 = Listenfeld (
altersliste ,
dt << Wählen Sie „Wo“. ( enthält ( alist_num [ select1 << Holen Sie sich ausgewählte Indizes ] , : Alter ) ) ;
selRows = dt << Ausgewählte Zeilen abrufen ;
)
) ,
Button-Box ( "OK" ,
dt << Wählen Sie „Wo“. ( enthält ( alist_num [ select1 << Holen Sie sich ausgewählte Indizes ] , : Alter ) ) ;
/* Ausgewählte Zeilen werden in eine neue Tabelle unterteilt. */
dt << Teilmenge ( Name der Ausgabetabelle ( „Ausgewählte Zeitalter“ ) ) ;
jetzt << Fenster schließen ;
)
) ;
Betreff: Fehler beim Erstellen von EingabeaufforderungenDer Vergleich
: Jahrm == Quarter_list [ select1 << erhalten ]
funktioniert nicht für mehr als einen Wert, da es die Gleichheit eines Zellenwerts und einer Liste testet. Es wird immer false zurückgegeben (ich glaube nicht, dass Zellen Listen enthalten können).
Dafür gibt es mehrere Möglichkeiten. Hier ist ein Vorschlag (für das Schaltflächenskript „OK“), bei dem die Zeilenauswahl auf einer Matrix von Zeilennummern basiert, die durch Durchlaufen der Liste ausgewählter Elemente erhalten wird.
Button-Box ( "OK" ,
Reihen = [] ;
L = Quarter_list [ select1 << Erhalten Sie ausgewählte Indizes ] ;
Für ( ich = 1 , ich <= N Artikel ( L ) , ich ++,
Reihen = Reihen || ( dt << Holen Sie sich Zeilen wo ( : Jahrm == L [ ich ] ))
) ;
/* Ausgewählte Zeilen werden in eine neue Tabelle unterteilt. */
dt << Teilmenge ( Zeilen(Zeilen), Name der Ausgabetabelle ( „Ausgewählte Viertel“ ) ) ;
jetzt << Fenster schließen ;
)
Betreff: Fehler beim Erstellen von EingabeaufforderungenVielen Dank, es funktioniert jetzt einwandfrei, wenn ich nur einen Wert der Variablen auswähle. Was soll ich tun, wenn ich beispielsweise drei Werte der Variablen für die neuen Daten auswählen möchte, indem ich Shitf drücke?
Betreff: Fehler beim Erstellen von EingabeaufforderungenWas in eckigen Klammern steht, wenn es als Listenindex verwendet wird, muss eine Zahl (oder eine Liste von Zahlen) sein. Versuchen Sie es stattdessen
Quarter_list [ select1 << Erhalten Sie ausgewählte Indizes ]
Betreff: Fehler beim Erstellen von EingabeaufforderungenVielen Dank für Ihre Tipps.
Es beschwert sich immer noch über diese [select1 << get]-Punkte.
Diese Variable „yearm“ ist eine Zeichenvariable und es hat nicht geholfen, selbst wenn ich „yearm“ als numerische Variable erstellt habe.
„Ungültiger Index (muss eine Zahl oder eine Liste von Zahlen sein){1} beim Zugriff oder bei der Auswertung von ‚Subscript‘, Quarter_list[select1 << get]“
Betreff: Fehler beim Erstellen von EingabeaufforderungenIch würde „quarter“ nicht als Variable verwenden, da es auch eine JMP-Funktion ist.Vielleicht Quarter_list?Versuchen Sie auch, die Anweisung zum Schließen des Fensters an die letzte Stelle zu setzen.Code nicht testen:
Zusammenfassen ( Quarter_list = Von ( Spalte ( dt , „Jahr“ ) ) ) ;
jetzt = Neues Fenster ( „Quartiere wählen“ ,
hb = Panel-Box ( „Jahr wählen“ ,
select1 = Listenfeld (
Quarter_list ,
dt << Wählen Sie „Wo“. ( : Jahrm == Quarter_list [ select1 << erhalten ] ) ;
selRows = dt << Ausgewählte Zeilen abrufen ;
)
) ,
Button-Box ( "OK" ,
dt << Wählen Sie „Wo“. ( : Jahrm == Quarter_list [ select1 << erhalten ] ) ;
/* Ausgewählte Zeilen werden in eine neue Tabelle unterteilt. */
dt << Teilmenge ( Name der Ausgabetabelle ( „Ausgewählte Viertel“ ) ) ;
jetzt << Fenster schließen ;
)
) ;