Hilfe beim Erstellen eines Skripts für ein interaktives Fenster, das je nach Benutzerauswahl aktualisiert wirdVerehrte Gäste,
Ich schreibe ein Skript, das für Benutzer in meiner Organisation bereitgestellt wird, um einige einfache, schnelle Statistiken für den Benutzer zu erstellen, ohne die Verteilungsplattform aufrufen zu müssen. Das Skript ist unten mit einem Screenshot von dem, was ich derzeit habe, und einer Liste der Dinge, mit denen ich Probleme habe. Die Benutzer werden JMP 16.1 ausführen, ich verwende JMP Pro 16.0. Alle Maschinen sind Windows 10, 64-Bit-Maschinen.
Der beabsichtigte Zweck des Skripts besteht darin, die numerischen Spalten anzuzeigen (vielleicht werde ich mich später mit kategorialen Spalten befassen). Je nachdem, welches Optionsfeld ausgewählt ist, führt es einige einfache Statistiken aus und zeigt die Ergebnisse im selben Fenster mit einer Spalte mit der Bezeichnung „Statistik“ an für die Art der berechneten Statistik und Werte für die Ergebnisse dieser Berechnungen. Das Feld „Ergebnisse“ sollte bei Auswahl des Optionsfelds aktualisiert werden, nachdem die entsprechende Spalte im Feld „Spalte auswählen“ ausgewählt wurde.
Aktuelles JMP-Skript (zu Ihrer Information, ich teste es mit der bekannten Big Class.jmp-Datei):
Names Default To Here( 1 );
//Clear Symbols();
//the width of the column list box in pixels
lbWidth = 100;
dt = Current Data Table();
//List of statistics to calculate
StatsListA = {"Mean", "Std Dev", "Max", "Min", "Range", "N"};
StatsListB = {"95% quantile", "50% quantile", "5% quantile"};
StatsListC = {};
//Expression to do math
MathA = Expr(
response_col = Column( dt, Eval( Eval Expr( Expr( ycols ) ) ) );
ymean = Col Mean( response_col );
ystdev = Col Std Dev( response_col );
ymin = Col Min( response_col );
ymax = Col Max( response_col );
yrange = ymax - ymin;
yN = Col Number( response_col );
NumResultsA = {ymean, ystdev, ymin, ymax, yrange, yN};
);
//Expresseion for other math
MathB = Expr(
);
ValueDlg = Expr(
nwin = New Window( "GUI for quick stats",
<<RETURN result=""></RETURN>
Folgendes habe ich bisher:

Hier ist die Liste der Dinge, mit denen ich Probleme habe:
- Der Aufruf der Radio Box() listet den lokalen Variablennamen „StatsListA“ usw. auf, anstatt tatsächlich die Statistiken aufzulisten, die berechnet werden. Beispielsweise sollte hinter dem ersten Optionsfeld die folgende Liste stehen: Mittelwert, Std.-Abw., Max., Min., Bereich, N. Dies sollte auch für StatsListB und StatsListC gelten (die C-Liste habe ich noch nicht definiert). Ich bin mir nicht sicher, wie ich die vordefinierte Liste, die ich oben im JSL-Code erstelle, auswerten kann. Ich würde es vorziehen, nicht jedes einzelne Element ausschreiben zu müssen, da ich möglicherweise die Elemente in der Liste ändern möchte und es einfacher ist, die lokale Variable StatsListX zu ändern, anstatt jedes Mal den Radio Box()-Aufruf zu bearbeiten.
- Im Moment würde ich es vorziehen, nicht ALLE Spalten aufzulisten, sondern nur numerische. Wenn ich die Option in Col List Box() von „Alle“ auf „Numerisch“ ändere (mit oder ohne „“), erhalte ich eine leere Liste von Spalten. Ich kann nicht herausfinden, warum das passiert, obwohl nur die numerischen Spalten aufgelistet werden sollten, wenn ich diese Option definiert habe.
- Das ist meiner Meinung nach das Schwierigste: Wie bereits erwähnt, möchte ich, dass die Ergebnisse im Panel-Feld „Ergebnisse“ mit einer Spalte „Stats“ auf der linken Seite aktualisiert werden (in der die Statistiken von StatsListX und die Berechnungsergebnisse für diese aufgelistet sind). Statistiken in der rechten Spalte „Werte“. Dies sollte mit jedem Klick auf ein Optionsfeld aktualisiert werden. Wenn Sie also ursprünglich :height betrachtet haben, sich aber :weight ansehen möchten, wählen Sie :weight aus und klicken dann auf eines der Optionsfelder, um die relevante statistische Zusammenfassung zu erhalten. Ich habe versucht, dem hier gezeigten Set Function-Beispiel zu folgen, war jedoch erfolglos (ich kenne den Set Function-Aufruf nicht sehr gut).

Der Aufruf von Expr() für MathA sollte durch Schließen des ursprünglichen Fensters und Öffnen eines neuen Fensters mit den Ergebnissen erfolgen. Nach weiteren Recherchen in den JMP-Diskussionen habe ich jedoch herausgefunden, dass man Felder in einem vorhandenen Fenster aktualisieren kann So gehe ich dieses Problem am liebsten an. Ich weiß also, dass der ursprüngliche Code oben in meinem Code nicht der richtige Code für das ist, was ich vorhabe.
Jede Hilfe hierzu wird sehr geschätzt.
Danke!,
DS
Qualitäts- und VerfahrenstechnikBetreff: Hilfe beim Erstellen eines interaktiven Fensters, das je nach Benutzerauswahl aktualisiert wirdDas ist so ordentlich. Vielen Dank für diese Diskussion.
Betreff: Hilfe beim Erstellen eines Skripts für ein interaktives Fenster, das je nach Benutzerauswahl aktualisiert wirdHallo zusammen,
Ich möchte Ihnen für Ihre fortlaufenden Änderungsvorschläge danken. Ich habe einige Änderungen am Skript vorgenommen und mir gefällt die neueste modifizierte Version besser, daher schätze ich die Beiträge anderer sehr. Das aktualisierte Skript wird am Ende dieser Antwort veröffentlicht. Dieses neue Skript stellt auch zusammenfassende Statistiken für Zeichendatentypen bereit. Auch das Layout der Panels habe ich leicht verändert.
@jthi Ich finde Ihre Vorschläge sehr gut und habe sie übernommen. Mir gefallen die farbigen Kopfzeilennamen für die Ergebnisstatistik. Auch ähnlich wie was @ErraticAttack in ihrem Code hatte, habe ich dafür gesorgt, dass die Statistiken aktualisiert werden, wenn eine neue Spalte ODER ein neues numerisches Ergebnis ausgewählt wird. Ich habe zugelassen, dass die Zeichenstatistikergebnisse ihre vertikale Größe ändern, da es möglicherweise viele Ebenen gibt, wie bei der Datentabelle „Big Class.jmp“. Die kategorialen Statistiken werden auch aktualisiert, wenn zu diesem Spaltentyp gewechselt wird, es wird jedoch ein Fehler ausgegeben, wenn die Zeichenspalte ausgewählt ist und dann jemand auf eine numerische Statistikoption klickt. Ich habe den Breitenvorschlag beibehalten, damit sich die Breite des Fensters nicht ständig ändert. Entschuldigung @ErraticAttack , ich bin derzeit nicht so vertraut mit der Definition neuer Namensräume und wie Sie bei der Änderung des Codes vorgegangen sind. Es sieht sehr nützlich aus und ist eine gute Herangehensweise. Ich muss nur lernen, wie man es richtig macht.
Ich bin mir sicher, dass es noch andere Vorschläge gibt, wie man das verbessern kann, insbesondere was die Ästhetik betrifft. Wenn ja, posten Sie es bitte, markieren Sie mich aber unbedingt, damit ich weiß, dass es ein Update zu dieser Diskussion gibt. Nochmals vielen Dank an alle für Ihre Verbesserungsvorschläge.
Danke!,
DS
unten
//GUI for quickly reporting statistics written by D. Schmidt, ver1.5
//Thanks to JMP User community members: jthi, ian_jmp, and ErraticAttach for helpful suggested changes.
Names Default To Here( 1 );
Clear Symbols();
//the width of the column list box in pixels
lbWidth = 217;
dt = Current Data Table();
//dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
//List of statistics to calculate
StatsList1 = {"µ", "σ", "Max", "Min", "Range(Δ)", "N"};
StatsList2 = {"Quantiles", "5%", "25%", "50%", "75%", "95%"};
StatsList3 = {"N", "N Missing", "N 0", "Prop 0", "Prop non-0"};
maxStatCount = Max( N Items( StatsList1 ), N Items( StatsList2 ), N Items( StatsList3 ) );
//RadioBox() arguments
rbArg = Eval List( {Concat Items( StatsList1, ", " ), Concat Items( StatsList2, ", " ), Concat Items( StatsList3, ", " )} );
rbcArg = {"Select for categorical columns"};
//Statistics to Calculate
statMean = Expr( Col Mean( tempCol ) );
statStd = Expr( Col Std Dev( tempCol ) );
statMax = Expr( Col Max( tempCol ) );
statMin = Expr( Col Min( tempCol ) );
statRange = Expr(
Col Max( tempCol ) - Col Min( tempCol )
);
statN = Expr( Col Number( tempCol ) );
statQ95 = Expr(
Col Quantile( tempCol, 0.05 )
);
statQ75 = Expr(
Col Quantile( tempCol, 0.25 )
);
statQ50 = Expr(
Col Quantile( tempCol, 0.5 )
);
statQ25 = Expr(
Col Quantile( tempCol, 0.75 )
);
statQ5 = Expr(
Col Quantile( tempCol, 0.95 )
);
statMiss = Expr(
Col N Missing( tempCol )
);
statZero = Expr(
N Items( Loc( tempCol << get as matrix, 0 ) )
);
statProp0 = Expr( statZero / statN );
statPropn0 = Expr( 1 - statProp0 );
CatStats = Expr(
coltype = tempCol << Get Data type;
If( coltype == "Character",
catdist = dt << Distribution( Nominal Distribution( Column( tempCol ) ), Invisible );
rpt_catdist = catdist << Report;
lvl = rpt_catdist[String Col Box( 1 )] << Get;
Count = rpt_catdist[Number Col Box( 1 )] << Get;
Prob = rpt_catdist[Number Col Box( 2 )] << Get;
SummNMiss = rpt_catdist[List Box( 7 )][2] << Get Text;
SummLvl = rpt_catdist[List Box( 8 )][1] << Get text;
numNMiss = Num( SummNMiss );
numLvl = Num( SummLvl );
catdist << Close Window;
);
Insert Into( lvl, {"N Missing", "N Levels"} );
Insert Into( Count, numNMiss );
Insert Into( Count, numLvl );
);
//List for results
StatList = Eval List( {StatsList1, StatsList2, StatsList3} );
StatListRes1 = Expr(
Eval List( {statMean, statStd, statMax, statMin, statRange, statN} )
);
StatListRes2 = Expr(
Eval List( {., statQ95, statQ75, statQ50, statQ25, statQ5} )
);
StatListRes3 = Expr(
Eval List( {statN, statMiss, statZero, statProp0, statPropn0} )
);
StatListRes = Expr(
Eval List( {StatListRes1, StatListRes2, StatListRes3} )
);
//User window
ValueDlg = Expr(
nwin = New Window( "GUI for quick stats",
<<RETURN result=""></RETURN>
Betreff: Hilfe beim Erstellen eines interaktiven Fensters, das je nach Benutzerauswahl aktualisiert wirdHallo @jimloughlin ,
Ich denke, das war nur ein Debugging-Code @jthi verwendete, als er seine Änderungsvorschläge für meinen ursprünglichen Code bereitstellte, den ich gepostet habe. Ich veröffentliche eine aktualisierte Version, die einige Änderungsvorschläge anderer Personen berücksichtigt, die in diesem Thread geschrieben haben. Ich werde Sie markieren, wenn ich das aktualisierte Skript veröffentliche. Bei mir funktioniert es einwandfrei mit der Datentabelle Big Class.jmp.
Danke!,
DS
Betreff: Hilfe beim Erstellen eines interaktiven Fensters, das je nach Benutzerauswahl aktualisiert wirdIch werfe hier meine Meinung ein.Oft ist es am besten, das Skript so weit wie möglich in logisch isolierte Einheiten oder Funktionen zu unterteilen.Zu diesem Zweck finde ich es viel besser, die Logik aus dem Anzeigebaum zu entfernen und die Funktionsdefinitionen so weit wie möglich zu reduzieren.
In meiner Beispiellösung unten sehen Sie, dass alle Funktionen auf den Bereich beschränkt sind selbst Namespace und dass die erste Zeile in jeder Funktion den Bereich definiert selbst Namensraum.In der Praxis habe ich einen Metaprogrammierungs-Wrapper erstellt, der dies automatisch erledigt, sodass ich den nicht explizit definieren muss selbst Namensraum oder schließen Sie den ein self = Namespace( "name" ) Zeile als erstes Argument jeder Funktion.Wenn Sie viele interaktive GUIs erstellen, möchten Sie möglicherweise etwas Ähnliches tun, da dies viel Arbeit spart.Dies hat auch den Vorteil, dass das Skript nicht in eine eingebettet werden muss Eval( Eval Expr( "<CODE>" ) ) Block.
Wenn Sie diesen Weg gehen, finde ich es außerdem am einfachsten, eine Hülle für die integrierten Anzeigeboxen zu erstellen, die direkt aufgerufen werden kann selbst Funktionen und es besteht nicht die Notwendigkeit, so viel Heizplatte in das Gerät zu stecken << Funktion festlegen() Mitteilungen.
/* quick stats */
self = New Namespace();
self:tool name = "Quick Stats";
Eval( Eval Expr(
self:initialize = Function( {}, // called before the display tree is generated
self = Namespace( Expr( self << Get Name ) );
self:table = Current Data Table();
self:radio inputs = {
"Mean, Std Dev, Max, Min, Range, N",
"Quantiles: 0.05, 0.25, 0.50, 0.75, 0.95",
"N, N Missing, N Zero, Prop 0, Prop non-0"
};
self:stat list = {
{"Mean", "Std Dev", "Max", "Min", "Range", "N"},
{"5%", "25%", "50%", "75%", "95%"},
{"N", "N Missing", "N Zero", "Prop 0", "Prop non-0"}
};
1
);
self:content = Function( {}, // holds the display tree
self = Namespace( Expr( self << Get Name ) );
self:container = H Splitter Box(
V List Box(
H List Box(
Lineup Box( N Col( 1 ), Spacing( 0 ),
Spacer Box( <<SET auto="" stretching=""></SET>self:window << Update Window;
self:finalize();
) );
self << Get Name;
Betreff: Hilfe beim Erstellen eines interaktiven Fensters, das je nach Benutzerauswahl aktualisiert wirdWenn ich statsstart.jcl ausführe, erhalte ich die folgende Fehlermeldung:
Name nicht aufgelöst: tempCol{1} beim Zugriff oder bei der Auswertung von 'tempCol', tempCol/*###*/
Vielleicht weil ich v13.2.1 verwende?
Betreff: Hilfe beim Erstellen eines interaktiven Fensters, das je nach Benutzerauswahl aktualisiert wirdNachdem Sie das Skript weitgehend so zum Laufen gebracht haben, wie Sie es möchten, gibt es ein paar visuelle Dinge, die ich berücksichtigen würde:
- Die Tabellengröße ändert sich und das Fenster „springt“ etwas
- Wenn der Benutzer keine Spalte ausgewählt hat, wird ein Fehler angezeigt
- Wenn keine Datentabellen geöffnet sind, können Sie die Skriptausführung stoppen und den Benutzer informieren
- Wenn der Benutzer die Spalte im Spaltenlistenfeld ändert, sollten Sie möglicherweise entweder die Statistiken mit der aktuellen Auswahl des Optionsfelds neu berechnen ODER die Tabelle leer setzen.
Ein paar Ideen:
- Feld „Für Ergebnisse“. Sie können Breiten festlegen verwenden, um zu verhindern, dass sich die horizontale Größe der Tabelle ändert, und ausgeblendete Platzhalter-String-Col-Box mit vordefinierter Listengröße, um vertikale Größenänderungen zu verhindern
- Wählen Sie das Bedienfeldfeld „Spalten“ aus. Sie können Max Selected(1) hinzufügen, um zu verhindern, dass Benutzer mehrere Spalten auswählen.
- Wählen Sie das Feld „Schnellstatistiken“ aus. Eine Art „Fehlerbehandlung“, wenn der Benutzer keine Spalte ausgewählt hat.
Vollständiges Skript mit einigen Änderungen:
Mehr sehen...
Betreff: Hilfe beim Erstellen eines interaktiven Fensters, das je nach Benutzerauswahl aktualisiert wirdHallo @jthi Und @ian_jmp ,
Vielen Dank euch beiden für eure tolle Hilfe! Vielen Dank für die letzten beiden letzten Hinweise @jthi Ich konnte das alphabetische „Problem“ des assoziativen Arrays lösen. Ich mag die Leistungsfähigkeit der AAs, ich sehe, wo sie nützlich sein können, aber ich muss aufgrund der Benutzer eine bestimmte Ordnung einhalten.
Ich konnte die Änderungen anhand des Listenvorschlags und Ihres Vorschlags für das Count Zero-Problem, das ich hatte, vornehmen. Danke! Der Code funktioniert wie erwartet. Jetzt muss ich ihn erweitern, um kategoriale Spalten zu erstellen, und dann meine Benutzer befragen, um herauszufinden, welche Statistiken sie tatsächlich benötigen.
Danke nochmal für all deine Hilfe! Der Arbeitscode (zumindest für numerische Spalten) ist unten.
Danke!,
DS
Names Default To Here( 1 );
Clear Symbols();
//the width of the column list box in pixels
lbWidth = 205;
dt = Current Data Table();
//dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
//List of statistics to calculate
StatsList1 = {"Mean", "Std Dev", "Max", "Min", "Range", "N"};
StatsList2 = {"Quantiles", "5%", "25%", "50%", "75%", "95%"};
StatsList3 = {"N", "N Missing", "N Zero", "Prop 0", "Prop non-0"};
//Statistics to Calculate
statMean = Expr( Col Mean( tempCol ) );
statStd = Expr( Col Std Dev( tempCol ) );
statMax = Expr( Col Max( tempCol ) );
statMin = Expr( Col Min( tempCol ) );
statRange = Expr(
Col Max( tempCol ) - Col Min( tempCol )
);
statN = Expr( Col Number( tempCol ) );
statQ95 = Expr(
Col Quantile( tempCol, 0.05 )
);
statQ75 = Expr(
Col Quantile( tempCol, 0.25 )
);
statQ50 = Expr(
Col Quantile( tempCol, 0.5 )
);
statQ25 = Expr(
Col Quantile( tempCol, 0.75 )
);
statQ5 = Expr(
Col Quantile( tempCol, 0.95 )
);
statMiss = Expr(
Col N Missing( tempCol )
);
statZero = Expr(
N Items( Loc( tempCol << get as matrix, 0 ) )
);
statProp0 = Expr( statZero / statN );
statPropn0 = Expr( 1 - statProp0 );
//RadioBox() argument
rbArg = Eval List( {Concat Items( StatsList1, ", " ), Concat Items( StatsList2, ", " ), Concat Items( StatsList3, ", " )} );
//List for results
StatList = Eval List( {StatsList1, StatsList2, StatsList3} );
StatListRes1 = Expr(
Eval List( {statMean, statStd, statMax, statMin, statRange, statN} )
);
StatListRes2 = Expr(
Eval List( {., statQ95, statQ75, statQ50, statQ25, statQ5} )
);
StatListRes3 = Expr(
Eval List( {statN, statMiss, statZero, statProp0, statPropn0} )
);
StatListRes = Expr(
Eval List( {StatListRes1, StatListRes2, StatListRes3} )
);
//User window
ValueDlg = Expr(
nwin = New Window( "GUI for quick stats",
<<RETURN result=""></RETURN>Betreff: Hilfe beim Erstellen eines interaktiven Fensters, das je nach Benutzerauswahl aktualisiert wird1. Durch die Verwendung von Associative Array werden die Statistiken neu geordnet. Sie könnten vielleicht einfach Listen verwenden und die Referenzierung ändern, um Indizes zu verwenden
2. Eine Änderung der Art und Weise, wie Sie 0-Werte berechnen, könnte funktionieren. Sie könnten zum Beispiel Beispiel Loc() mit N Items() verwenden:
statZero = Expr(N Items(Loc(tempCol << get as matrix, 0)));

Betreff: Hilfe beim Erstellen eines interaktiven Fensters, das je nach Benutzerauswahl aktualisiert wirdHallo @jthi Und @ian_jmp ,
Vielen Dank euch beiden für die schnelle Rückmeldung! Ihre Vorschläge haben großartig funktioniert und ich konnte viel mehr Fortschritte machen. Jetzt habe ich Probleme mit nur zwei wahrscheinlich sehr einfachen Dingen: Ich füge den aktualisierten Code unten ein. Nur zur Information, ich habe einige Werte in :height gelöscht und einige Nullen in :height hinzugefügt, um es zu testen
Probleme:
- Die Statistiken werden in alphabetischer Reihenfolge aufgelistet. Ich möchte die von mir in meinen Listen festgelegte Reihenfolge beibehalten. Ist das möglich?
- Ich versuche, das Verhältnis von Null und Nicht-Null zu berechnen, indem ich zunächst die Anzahl der Nullen zähle. Leider funktioniert es nicht ganz richtig. Ich kann die Zusammenfassung in ein Expr() einfügen, aber dann kann ich das assoziative Array nicht definieren und erhalte nicht die richtigen Folgeberechnungen. Ich bin mir sicher, dass es eine einfachere Möglichkeit gibt, dies zu tun, aber ich konnte in JSL keinen direkten Befehl finden, nur Nullen zu zählen. Ich habe 5 fehlende Werte und 7 Nullwerte manuell eingegeben. Der Prop-Wert ungleich Null sollte also 0,8 und der Prop-Nullwert 0,2 betragen.
Names Default To Here( 1 );
Clear Symbols();
//the width of the column list box in pixels
lbWidth = 205;
dt = Current Data Table();
//dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
//List of statistics to calculate
StatsListA = {"Mean", "Std Dev", "Max", "Min", "Range", "N"};
StatsListB = {"Quantiles", "5%", "25%", "50%", "75%", "95%"};
StatsListC = {"N", "N Missing", "N Zero", "Prop 0", "Prop non-0"};
//RadioBox() argument
rbArg = Eval List( {Concat Items( StatsListA, ", " ), Concat Items( StatsListB, ", " ), Concat Items( StatsListC, ", " )} );
//Statistics to Calculate
statMean = Expr( Col Mean( tempCol ) );
statStd = Expr( Col Std Dev( tempCol ) );
statMax = Expr( Col Max( tempCol ) );
statMin = Expr( Col Min( tempCol ) );
statRange = Expr(
Col Max( tempCol ) - Col Min( tempCol )
);
statN = Expr( Col Number( tempCol ) );
statQ95 = Expr(
Col Quantile( tempCol, 0.05 )
);
statQ75 = Expr(
Col Quantile( tempCol, 0.25 )
);
statQ50 = Expr(
Col Quantile( tempCol, 0.5 )
);
statQ25 = Expr(
Col Quantile( tempCol, 0.75 )
);
statQ5 = Expr(
Col Quantile( tempCol, 0.95 )
);
statMiss = Expr(
Col N Missing( tempCol )
);<BR /><BR />//Here's where I'm having trouble with the N Zero and proportions zero and non-zero.
Expr(
Summarize( dt, eg = By( tempCol ), em = Count( tempCol ) )
);
PropTemp1 = Expr(
Associative Array( eg, em )
);
statZero = Expr( PropTemp1["0"] );
statProp0 = Expr( statZero / statN );
statPropn0 = Expr( 1 - statProp0 );
maths = Associative Array();
maths["StatListA"] = Associative Array( StatsListA, {statMean, statStd, statMax, statMin, statRange, statN} );
maths["StatListB"] = Associative Array( StatsListB, {., statQ95, statQ75, statQ50, statQ25, statQ5} );
maths["StatListC"] = Associative Array( StatsListC, {statN, statMiss, statZero, statProp0, statPropn0} );
rbOptions = maths << Get Keys;
//User window
ValueDlg = Expr(
nwin = New Window( "GUI for quick stats",
<<RETURN result=""></RETURN>
Nochmals vielen Dank für Ihre bisherige Hilfe und ich hoffe, dass Sie auch bei diesen anderen kleinen Dingen helfen können.
Danke!,
DS
Betreff: Hilfe beim Erstellen eines interaktiven Fensters, das je nach Benutzerauswahl aktualisiert wirdBezüglich Punkt 1. und nur eine kleine Ergänzung zur Antwort von @jthi , du kannst tun:
Names Default To Here( 1 );
//the width of the column list box in pixels
lbWidth = 100;
dt = Open("$SAMPLE_DATA/Big Class.jmp");
//List of statistics to calculate
StatsListA = {"Mean", "Std Dev", "Max", "Min", "Range", "N"};
StatsListB = {"95% quantile", "50% quantile", "5% quantile"};
//RadioBox() argument
rbArg = EvalList({ConcatItems(StatsListA, ", "), ConcatItems(StatsListB, ", ")});
//Window
New Window( "GUI for quick stats",
Panel Box( "Select Columns", ColListData = Col List Box( dt, all, <<SET data="https://community.jmp.com/" type=""></SET>
Betreff: Hilfe beim Erstellen eines interaktiven Fensters, das je nach Benutzerauswahl aktualisiert wirdIch habe einige kurze Tests durchgeführt und das Skript angehängt. Es gibt mögliche Ideen, wie Sie dies angehen, aber möglicherweise nicht die besten Lösungen.
1. Mit assoziativen Arrays und Ausdrücken behandelt.
2. Musste dafür eine seltsame Syntax verwenden ColListData = Col List Box(dt, All, <
3. Set Function verarbeitet dies mit Evals.
Das beigefügte Skript gibt vorerst die beste Vorstellung davon, wie ich das angegangen bin.
