Hallo zusammen,
Ich versuche, einen JSL-Code zu schreiben, der Daten aus einer Datentabelle nimmt und sie grafisch anzeigt, damit der Benutzer zur weiteren Analyse auswählen kann. Was ich gerne hätte, ist so etwas wie eine Mischung aus dem Eigenwertbericht von der PCA-Plattform und dem Effektzusammenfassungsbericht von der Fit Model-Plattform. Ich möchte, dass das Visual wie der PCA-Bericht aussieht, aber die Funktionalität (dh die Möglichkeit, eine Zeile auszuwählen) des Effektzusammenfassungsberichts.
PCA-Eigenwertbericht (wie ich ihn haben möchte):

Bericht "Zusammenfassung des Modelleffekts anpassen" (die Funktionalität, die ich gerne hätte). Auf dieser Plattform kann man eine Zeile in der List Box() auswählen und zwischen "Entfernen" oder "Hinzufügen" wählen. Ich möchte nicht entfernen oder hinzufügen, aber ich möchte, dass der Benutzer die Zeile auswählen kann (aus der obigen Ausgabe):

Ich habe die Datentabelle, mit der ich arbeite, angehängt, dies ist die "Aktuelle Datentabelle ()" im JSL-Code unten. Der unten stehende JSL-Code kann mir einen Teil des Weges bringen, aber nicht genau das, was ich will.
Names Default To Here( 1 );
PC_dt = Current Data Table();
PC_n = {};
PC_eigv = {};
PC_per = {};
PC_cump = {};
For( i = 1, i <= N Rows( PC_dt ), i++,
Insert Into( PC_n, PC_dt:"Number"n[i] );
Insert Into( PC_eigv, Round( PC_dt:"Eigenvalue"n[i], 5 ) );
Insert Into( PC_per, Round( PC_dt:"Percent"n[i], 5 ) );
Insert Into( PC_cump, Round( PC_dt:"cumulative Percent"n[i], 5 ) );
);
PC_Rpt_win = New Window( "PC Results",
Outline Box( "Eigenvalues & cumulative Percent",
//List Box(
//List Box(
Table Box(
Number Col Box( "Number", Eval List( PC_n ) ),
Number Col Box( "Eigenvalue", Eval List( PC_eigv ), <<SET format=""></SET>
Mit den auskommentierten Abschnitten erhalte ich die folgende Ausgabe des Codes (es ist jedoch keine Zeile auswählbar):

Ich weiß wirklich nicht, ob ich den gesamten Pre-Outline-Box-Teil des Codes brauche, in dem ich Listen für die PCs und Eigenwerte usw. erzeuge. Aber es schien der logische Weg zu sein, da ich mich mit Spalten in beschäftige eine Datentabelle und die Funktionen erfordern Listen. Es funktioniert, auch wenn es nicht nötig ist.
</CODE></P><P> </P><P>Wenn ich einen oder beide der auskommentierten List Box()-Aufrufe um die Table Box() herum einfüge, erhalte ich Folgendes. Zeilen sind auswählbar, aber nichts wird angezeigt:</P><P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DiedrichSchmidt_3-1635336043749.png" style="width: 400px;"><IMG src="https://us.v-cdn.net/6038925/uploads/images/37045iA319787974999980/DiedrichSchmidt_3-1635336043749.png" role="button" title="DiedrichSchmidt_3-1635336043749.png" alt="DiedrichSchmidt_3-1635336043749.png" /></SPAN></P><P>Ich bin mir nicht sicher, was ich falsch mache, und der Scripting-Index enthält begrenzte Beispiele für die korrekte Verwendung des List Box()-Aufrufs mit einer Table Box(). Ich habe versucht, der Baumstruktur aus dem Berichtfenster der Fit Model-Plattform zu folgen, aber es funktioniert nicht.</P><P> </P><P>Zusammenfassend möchte ich folgendes in meinem Skript korrigieren:</P><OL><LI>Korrigieren Sie die Plot Col Box so, dass sie die kumulative Prozentkurve wie im PC-Bericht zeigt (erstes Bild oben). Dies ist nicht so kritisch wie Punkt 2.</LI><LI>Korrigieren Sie den List Box()-Aufruf um die Table Box() herum, sodass der Benutzer eine Zeile in der Listbox auswählen kann, die dann zur weiteren Analyse an eine andere Funktion weitergeleitet wird.</LI></OL><P>Danke für Anregungen und Hilfe!,</P><P>DS</P></LINGO-BODY><LINGO-LABS id="lingo-labs-430708" slang="en-US"><LINGO-LABEL>Skripting</LINGO-LABEL></LINGO-LABS><LINGO-SUB id="lingo-sub-430729" slang="en-US">Betreff: Scripting-Hilfe für Table Box() innerhalb einer List Box()</LINGO-SUB><LINGO-BODY id="lingo-body-430729" slang="en-US"><P>Gibt es eine besondere Notwendigkeit für List Box()? Sie können verwenden<CODE class=""> << Auswählbare Zeilen setzen(); um Zeilen in der Tabellenbox auswählbar zu machen und verwenden Sie dann << Zeilenwechselfunktion einstellen (Funktion ({dies}, ); um der Auswahl eine Funktion hinzuzufügen.
Beispiel aus dem Scripting-Index:
Names Default To Here(1);
New Window("Mountains",
tb = Table Box(
String Col Box("Mountain", {"K2", "Delphi", "Kilimanjaro", "Grand Teton"}),
Number Col Box("Elevation (meters)", {8611, 681, 5895, 4199}),
Plot Col Box("", {8611, 681, 5895, 4199})
)
);
tb << Set Selectable Rows();
tb << set row change function(Function({this}, Print(this << get selected rows)));
Hi @jthi ,
Danke für dein schnelles Feedback. Ich hatte das schon früher versucht, aber es war nichts passiert, also habe ich es aufgegeben und eine andere Route gewählt, aber es führte nirgendwohin. Ich ging zurück und versuchte es, und es funktioniert, danke! Die zusätzliche Funktionalität ist hilfreich. Damit war Punkt 2, der wichtiger war, definitiv gelöst. Wenn Sie eine Idee haben, wie Sie Punkt 1 beheben können, wäre das großartig, aber nicht unbedingt erforderlich.
Dies ist verwandt, aber vielleicht ein anderer Thread (lass es mich wissen und ich werde es als einen anderen Thread erneut veröffentlichen).
Wissen Sie, wie Sie mit JSL die DModX- und T²-Werte von der PCA-Plattform in der Datentabelle speichern? All dies dient dazu, diesen Prozess zu automatisieren oder zumindest einige der anderen Schritte zu entfernen und dem Benutzer nur die Grundlagen für die Entscheidung über die Anzahl der PCs zu geben, die dann zum Speichern der DModX- und T²-Formeln verwendet werden.
Vielen Dank!,
DS
Hi @jthi ,
Nun, vergessen Sie den Teil über DModX, der Scripting Index hat mir gezeigt, wie das geht und es funktioniert wie erwartet. Es gibt ein Beispiel für Save T Square, aber das funktioniert nicht. Ich bleibe dabei. Ich glaube, ich muss auf das richtige Gliederungsfeld verweisen.
Vielen Dank!,
DS
Zu Artikel 1:
Ich würde vermuten, dass es einen anderen / besseren Weg gibt, dies zu tun, aber ich habe << Lower und << Upper (erfordert die Angabe von Lower) Nachrichten gefunden. Mit << Lower können Sie erste Werte aus der Cumulative Column abrufen und diese dann mit Lower auf Plot Col Box setzen
pcb << Lower(ncb << get as matrix);

Mit Ihrem Code würde es ungefähr so aussehen (Fügen Sie Referenzen hinzu und verwenden Sie diese):
Mehr sehen...Names Default To Here( 1 );
PC_dt = Current Data Table();
PC_n = {};
PC_eigv = {};
PC_per = {};
PC_cump = {};
For( i = 1, i <= N Rows( PC_dt ), i++,
Insert Into( PC_n, PC_dt:"Number"n[i] );
Insert Into( PC_eigv, Round( PC_dt:"Eigenvalue"n[i], 5 ) );
Insert Into( PC_per, Round( PC_dt:"Percent"n[i], 5 ) );
Insert Into( PC_cump, Round( PC_dt:"cumulative Percent"n[i], 5 ) );
);
PC_Rpt_win = New Window( "PC Results",
Outline Box( "Eigenvalues & cumulative Percent",
//List Box(
//List Box(
Table Box(
Number Col Box( "Number", Eval List( PC_n ) ),
Number Col Box( "Eigenvalue", Eval List( PC_eigv ), <<SET format=""></SET>Zum Abrufen von Werten:
Manchmal kann es ausreichen, Make into data table zu verwenden (abhängig von der Plattform und wenn Sie By-Variable verwenden):

und dann aus der resultierenden Tabelle das Tabellenskript überprüfen:


Manchmal bietet dies eine recht schnelle Möglichkeit, Verweise auf korrekte Anzeigeboxen zu erhalten.
Hallo @jthi ,
Nochmals vielen Dank für Ihr schnelles Feedback und Ihre Hilfe. Ja, der <
Jetzt ist mein einziges Problem, wie ich T² sparen kann. Jedes Mal, wenn ich versuche, das fragliche Gliederungsfeld von der PCA-Plattform aus anzusprechen, erhalte ich einen Protokollfehler, der besagt, dass das Anzeigefeld <
Danke!,
DS