Die gleiche Ausgabe für alle Ausprägungen einer kategorialen Variable skriptenHallo,
Ich habe ein Skript, das Berechnungen durchführt, verschiedene Plattformen ausführt und bestimmte Ausgaben extrahiert. Anschließend öffnet es ein Tab-Feld in einem neuen Fenster. Ich möchte dies alles für jede Ausprägung einer vom Benutzer in meinem Dialogfeld festgelegten Kategorievariable durchführen.
Aktuell erstelle ich einzelne Teilmengen der Daten basierend auf meiner Gruppierungsvariablen und durchlaufe dann jede dieser Teilmengen:
dtSubset = dt << Subset( By( Eval( groupVar ) ), Linked, Selected Columns Only( 0 ), All Rows( 1 ), Invisible );
For( i = 1, i <= N Items( unique_groups ), i++,
dt_i = dtSubset[i];
...some code to do stuff
<BR />...append output as a new tab box in my window
);
Essentially all I am doing is coding up my own analysis and wanting a 'By' variable. I am wondering if there is a better or more efficient way to go about this? The main thing I want with the code is to have the output I create be specific for each level, while also still maintaining a connection to the original data table (meaning the plots in my output are interactive still).
Wie Sie sehen können, erstelle ich die Teilmengen als unsichtbar und schließe sie dann in meinem Code am Ende jeder Iteration der Schleife.
Danke,
Robert
Automatisierung und SkripterstellungBetreff: Skripterstellung für die gleiche Ausgabe für alle Ausprägungen einer kategorialen VariableGibt es einen Grund, warum die Variable „By“ innerhalb der Plattformen nicht verwendet wird?
Betreff: Skripterstellung für die gleiche Ausgabe für alle Ausprägungen einer kategorialen VariableHier sind drei Möglichkeiten, um mithilfe einer Gruppierungsspalte eine Registerkarte aus einer Datentabelle zu erstellen. Wenn Sie JMP 18 oder höher verwenden (glaube ich), ist die letzte Methode definitiv die einfachste.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// Using subsets
dt_subsets = dt << Subset(
By(:age),
Linked,
Selected Columns Only(0),
All Rows(1),
Invisible
);
nw = New Window("Subsets",
tb = tab box()
);
dists = {};
For Each({dt_subset}, dt_subsets,
tb << Insert(Tab Page Box(Title(dt_subset << get name),
dt_subset << Distribution(
Continuous Distribution(Column(:weight)),
Nominal Distribution(Column(:age))
);
));
);
tb << Set Selected(1);
// Using Where in platform
nw = New Window("Where",
tb = tab box()
);
groups = Associative Array(Column(dt, "age")) << get keys;
dists = {};
For Each({group}, groups,
tb << Insert(Tab Page Box(Title("age=" || Char(group)),
dist = dt << Distribution(
Continuous Distribution(Column(:weight)),
Nominal Distribution(Column(:age)),
Where(:age == group)
);
));
(Report(dist) << Top Parent)[TextBox(1)] << Visibility("Collapse"); // to hide Where(... textbox
);
tb << Set Selected(1);
// Using By in platform
dist = dt << Distribution(
Group Options(Layout("Arrange in Tabs")),
Continuous Distribution(Column(:weight)),
Nominal Distribution(Column(:age)),
By(:age)
);
Betreff: Skripterstellung für die gleiche Ausgabe für alle Ausprägungen einer kategorialen VariableAufbauend auf Jarmos Beispiel „Nach Gruppe“ folgt hier ein Beispiel, das das Tab-Fenster erzeugt, das Ihre Ausgabe enthält.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// Using By in platform
dist = dt << Distribution(Invisible,
Group Options(Layout("Arrange in Tabs")),
Continuous Distribution(Column(:weight)),
Nominal Distribution(Column(:age)),
By(:age)
);
// Create a new window and add tabs for each age
nw = New Window( "Tabs",
tabb = Tab Box();
);
For( i = 1, i <= N Items( dist ), i++,
display = Report( dist[i] );
theByGroup = display[Outline Box( 1 )] << get title;
tabb << append( Tab Page Box( Title( theByGroup ), display ) );
);

Betreff: Skripterstellung für die gleiche Ausgabe für alle Ausprägungen einer kategorialen VariableDer Hauptgrund ist eigentlich, dass ich es einfacher fand, die verschiedenen Stufen meiner Variable zu durchlaufen und jedes Tab-Fenster entsprechend zu erstellen und anschließend anzuhängen. Denn für jede Stufe führe ich Berechnungen für Tabellen durch, erstelle ein Diagramm mit dem Graph Builder, extrahiere QQ-Plots von der Dist-Plattform, extrahiere den studentisierten Residuenplot von der Fit-Model-Plattform usw.
Betreff: Skripterstellung für die gleiche Ausgabe für alle Ausprägungen einer kategorialen VariableVielen Dank für eure Beiträge, der bereitgestellte Code funktioniert einwandfrei. Ich möchte noch hinzufügen, dass ich ein recht komplexes Add-in entwickle, das Daten von vielen verschiedenen Plattformen einbindet und auch neue Ausgaben erzeugt. Mir war es wichtig, dass meine Diagramme und Tabellen, die normalerweise mit meiner Datentabelle verknüpft sind, diese Verknüpfung beibehalten. Außerdem sollten alle Tabs identisch aussehen, daher schien eine Schleife eine einfache Lösung zu sein.
Meinen Sie, der beste Weg wäre, einfach die Option „Nach“ auf allen von mir verwendeten Plattformen zu nutzen und dann die Ebenen meiner Variable zu durchlaufen, jede Komponente über die verschiedenen Pfade aufzurufen und diese an der gewünschten Stelle anzuhängen?
Betreff: Skripterstellung für die gleiche Ausgabe für alle Ausprägungen einer kategorialen VariableWenn Sie die Daten wie von Jim gezeigt anhängen, geht die Interaktivität verloren. Subset/Where funktionieren zwar beide gut, aber es gibt Fälle, in denen Where nicht so einfach zu verwenden ist, beispielsweise beim Erstellen von Zusammenfassungstabellen (hierfür wird der lokale Datenfilter anstelle von Where verwendet). Bei Subsets können zudem viele Datentabellen entstehen, die Sie möglicherweise nicht wie erwartet schließen (beim Schließen der Haupttabelle). Manchmal ist es auch sinnvoll, den lokalen Datenfilter zu verwenden, da Sie mit dem Datenfilter-Kontextfeld einen Filter für mehrere Plattformen nutzen können.