Das Aktualisieren des Spaltenlistenfelds mithilfe der in der Variablen gespeicherten Liste funktioniert nicht wie erwartet. Ist das so gemeint?Ich versuche, frühere „Sünden“ in einem von mir geschriebenen Skript zu korrigieren, indem ich es mit einstimmigen Referenzen aktualisiere, d. oder eine „störende“ Tabelle. Ich habe versucht, das Problem unten zu rekonstruieren.
Names Default To Here( 1 );
// this is the table i want to work with
dt = New Table( "Target table", invisible,
Add Rows( 3 ),
New Column( "Name_1",
Character( 1 ),
"Nominal",
Set Values( {"A", "B", "C"} ),
Set Display Width( 45 )
),
New Column( "Name_2",
Character( 1 ),
"Nominal",
Set Values( {"X", "Y", "Z"} ),
Set Display Width( 45 )
),
New Column( "NumericRight",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [1, 2, 3] ),
Set Display Width( 78 )
),
New Column( "NumericAlso",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [7, 8, 9] )
)
);
dt2 = New Table( "Interfering table", invisible,
Add Rows( 3 ),
New Column( "Name_1",
Character( 1 ),
"Nominal",
Set Values( {"D", "E", "F"} ),
Set Display Width( 45 )
),
New Column( "Name_2",
Character( 1 ),
"Nominal",
Set Values( {"U", "V", "W"} ),
Set Display Width( 45 )
),
New Column( "NumericInterference",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [4, 5, 6] )
),
New Column( "MoreNumeric",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [7, 8, 9] )
)
);
// get lists
lstName_1 = Associative Array( dt:Name_1 ) << Get Keys;
lstName_2 = Associative Array( dt:Name_2 ) << Get Keys;
colList = dt << Get Column Names( "Numeric" );
// window with radio buttons & col list box
New Window( "Select values",
Show Menu( 0 ),
Show Toolbars( 0 ),
Border Box( Top( 0 ), Bottom( 20 ), Left( 20 ), Right( 10 ),
H List Box(
Panel Box( "Name_1",
Radio Box(
Eval List( lstName_1 )
)
),
Panel Box( "Name_2",
Radio Box(
Eval List( lstName_2 )
)
),
Panel Box( "Numeric Columns",
clb = Col List Box( )
),
clb << Append( colList ); // making me cry ...
)
)
);
Was ich sehen möchte :

Was ich immer sehe, wenn meine „Zieltabelle“ nicht die aktuelle Tabelle ist :

Was mich völlig verwirrt, ist, dass, wenn ich den Namen ändere dt2:NumericInterference Zu dt2:NumericRight , ich bekomme dieses Ergebnis :

Warum lässt dt2 mein Skript nicht die Arbeit erledigen, die ich möchte? Warum wirkt sich die Namensänderung einer Spalte in dt2 darauf aus, was in das Spaltenlistenfeld gelangt? Ich habe einige Variationen des Verschiebens ausprobiert colList Variable und habe auch versucht, sie einzupacken Evaluierungsliste() , ohne „Glück“.
Als ich erneut in der Community suchte, fand ich Folgendes Benötigen Sie Hilfe beim Ausfüllen des Col-Listenfelds? Wenn es eine andere Lösung gibt, danke für den Hinweis. Oder ist es so gemeint, und wenn ja, welche Bedeutung hat das?
Automatisierung und SkripterstellungBetreff: Das Aktualisieren des Spaltenlistenfelds mithilfe der in einer Variablen gespeicherten Liste funktioniert nicht wie erwartet. Ist das so gemeint?Hallo,
Auf den ersten Blick müssen Sie nur die folgende Syntax verwenden, um die Liste der numerischen Spalten aus der Tabelle dt zu erhalten:
clb = Col List Box(dt, all, << Set Data Type ("numeric"))
Außerdem ist nicht klar, wie die Zeile „clb << append (collist)“ funktionieren könnte, da „Get Column Names“ eine Liste von Namen und nicht von Spalten zurückgibt.
Schließlich glaube ich nicht, dass Sie das Col List Box über mehrere Tabellen hinweg verwenden können (korrigieren Sie mich, wenn ich hier falsch liege).
Am besten,
TS
Betreff: Das Aktualisieren des Spaltenlistenfelds mithilfe der in einer Variablen gespeicherten Liste funktioniert nicht wie erwartet. Ist das so gemeint?Scheint, dass das Spaltenlistenfeld nur Spalten aus der Datentabelle akzeptiert, die zum Zeitpunkt der Erstellung des Spaltenlistenfelds „aktuell“ war.
Wenn dt2 die entsprechende Spalte nicht enthält, kann sie nicht hinzugefügt werden.
Ich schätze
current data table(dt);
// window with radio buttons & col list box
New Window( "Select values",
ist für dich keine Option?
Wenn nicht, dann verwenden
clb = Col List Box( Data Table(dt) )
um anzugeben, welche Datentabelle für das Spaltenlistenfeld verwendet werden soll:

Betreff: Das Aktualisieren des Spaltenlistenfelds mithilfe der in einer Variablen gespeicherten Liste funktioniert nicht wie erwartet. Ist das so gemeint?Danke @Thierry_S , das werde ich morgen versuchen. Wenn dt2 jedoch aus dem Skript auskommentiert wird, wird die Col List Box wie erwartet aktualisiert, sodass es definitiv funktioniert (siehe auch den ersten Screenshot in meinem ursprünglichen Beitrag).
Betreff: Das Aktualisieren des Spaltenlistenfelds mithilfe der in einer Variablen gespeicherten Liste funktioniert nicht wie erwartet. Ist das so gemeint?@hogi , Danke, ich werde es morgen auch versuchen und euch das Ergebnis mitteilen.
Betreff: Das Aktualisieren des Spaltenlistenfelds mithilfe der in einer Variablen gespeicherten Liste funktioniert nicht wie erwartet. Ist das so gemeint?@Thierry_S , seltsamerweise und leider funktioniert das nicht. In dem Skript, das ich ursprünglich gepostet habe, habe ich gemäß Ihrem Vorschlag die folgenden Änderungen vorgenommen:
// this part was revised ...
Panel Box( "Numeric Columns",
clb = Col List Box( )
),
clb << Append( colList ); // making me cry ...
// ... to look like this.
Panel Box( "Numeric Columns",
clb = Col List Box( dt, all, << Set Data Type ( "numeric" ) ) // this adds the numeric columns from dt2. Why???
)
Dies ergab das folgende Ergebnis, was bedeutet, dass die numerischen Spalten von dt2 zum Spaltenlistenfeld hinzugefügt wurden, wohingegen ich die numerischen Spalten von dt möchte.

Dennoch sehr nützliches Lernen für mich. Danke schön!
Betreff: Das Aktualisieren des Spaltenlistenfelds mithilfe der in einer Variablen gespeicherten Liste funktioniert nicht wie erwartet. Ist das so gemeint?
@Ressel schrieb:
@Thierry_S , seltsamerweise und leider funktioniert das nicht.</CODE></P><HR /></BLOCKQUOTE><P> </P><P>Der Code ist fast korrekt, aber Sie müssen ihn verwenden</P><PRE><CODE class=" language-jsl">clb = Col List Box(Data Table(dt), all, << Set Data Type ("numeric"))
Sie können auch verwenden
clb = Col List Box(all, << Set Data Type ("numeric"), Data Table(dt))Sie sollten jedoch den „Indikator“ *) Data Table() nicht vergessen.
Wie in meinem vorherigen Beitrag (unten) angegeben, muss dies laut Skript-Anleitung so sein

Wie bei den Spaltennamen spielt es keine Rolle, ob Sie den Namen oder die Referenz verwenden.
Es muss sich jedoch um eine Datentabelle (Name oder Tabellenreferenz) handeln und nicht nur um das Argument ohne Indikator.
Das ist etwas irreführend, da Data Table(name) oft durch eine Datentabellenreferenz ersetzt werden kann 
Aber hier ist die Datentabelle ein optionales Argument – und deshalb muss es einen Indikator *) geben, damit Jmp weiß, was es ist.
*) Wie lautet die offizielle Bezeichnung für „Indikator“?
Betreff: Das Aktualisieren des Spaltenlistenfelds mithilfe der in einer Variablen gespeicherten Liste funktioniert nicht wie erwartet. Ist das so gemeint?@hogi , Ich bin erstaunt! Ich danke Ihnen für Ihre Hilfe.
- Es funktioniert natürlich, die gewünschte Tabelle zur aktuellen Tabelle zu machen. Irgendwie wollte ich das trotzdem vermeiden.
- Aber auch der folgende Code funktioniert
Panel Box( "Numeric Columns",
clb = Col List Box(Data Table( dt ))
),
clb << Append( colList ); // this is still required, which I find interesting, since I thought the clb was already added above via Col List Box(...)
Im Gegensatz dazu funktioniert das Folgende nicht. Vielmehr werden die numerischen Spalten von dt2 hinzugefügt, was für mich keinen Sinn ergibt.
Panel Box( "Numeric Columns",
clb = Col List Box(dt, all, << Set Data Type ( "numeric" )) // adds numeric columns from dt2 :(...
),
/*clb << Append( colList );*/ // doesn't matter whether this is commented out or not
Betreff: Das Aktualisieren des Spaltenlistenfelds mithilfe der in einer Variablen gespeicherten Liste funktioniert nicht wie erwartet. Ist das so gemeint?Hallo @Ressel .
Ich muss zugeben, es hat mich auch etwas verwirrt 
Sie hätten es benutzen sollen
Col List Box(<FROM data="https://community.jmp.com/" table=""></FROM>
als optionales Argument ... oder irgendetwas anderes - aber anders als Datentabelle("Tabellenname")
- Irgendwie irreführend, oder?
Nach Jahren als Jmp-Benutzer ist man zu versucht, den gesamten Ausdruck durch zu ersetzen dt - und dabei den „Indikator“ vergessen.
Andererseits ist es schön, dass man die Tabellenreferenz anstelle des Tabellennamens als Argument der Datentabelle verwenden kann 
Betreff: Das Aktualisieren des Spaltenlistenfelds mithilfe der in einer Variablen gespeicherten Liste funktioniert nicht wie erwartet. Ist das so gemeint?Die Anwesenheit und Hilfe von Benutzern wie Ihnen ist es, die viele Menschen, mich eingeschlossen, in Bezug auf Skripterstellung und andere JMP-bezogene Fähigkeiten voranbringen. Das ist Freundlichkeit und wird sehr geschätzt.
Betreff: Das Aktualisieren des Spaltenlistenfelds mithilfe der in einer Variablen gespeicherten Liste funktioniert nicht wie erwartet. Ist das so gemeint?@Thierry_S , @hogi Zu Ihrer Information – https://www.pega-analytics.co.uk/blog/handling-lists-of-columns/
Betreff: Das Aktualisieren des Spaltenlistenfelds mithilfe der in einer Variablen gespeicherten Liste funktioniert nicht wie erwartet. Ist das so gemeint?Vielen Dank für den Link, @David_Burnham Blog enthält eine schöne Sammlung von Juwelen!
Ich habe gerade den Teil über Spaltenverweise in der Distributionsplattform gelesen.
Interessant - laut Scripting-Index ist es:

Da es keine gibt“ < >" rund um das Column()-Argument könnte man das denken Spalte() ist das einzige, nicht optionale Argument
- Verwendet es die Spalte() Funktion zum Generieren einer Spaltenreferenz?
Aber eigentlich ist es dasselbe wie Datentabelle() in der vorherigen Diskussion:
Spalte() ist ein Indikator für ein Optional Streit:
- Es kann überall platziert und weggelassen werden
- Es akzeptiert eine Spalte oder eine Liste von >=1 Spalten (als Referenz oder Name) – klares Zeichen dafür, dass es sich NICHT um die Funktion columns() handelt
Ich habe im Scripting Index einen weiteren Eintrag gefunden, bei dem die Punkte vor und nach dem Columns()-Argument darauf hinweisen, dass das Argument optional ist.
Hier sind es Spalten [Plural] – wie in der GUI. Y ist ein weiterer Alias. Beides hilft dabei, sich nicht von der Funktion ablenken zu lassen Spalte() .

// aliasDistribution(Column("height"));
Distribution(:height); // doesn't work<BR /><BR />Distribution(Columns("name", :sex)); // accepts >=1 arguments; column references and names<BR />Distribution(Columns({"name", :sex})); // accepts lists
<BR />Distribution(Continuous Distribution(Column( :height ))); // Distribution can be used without a Column() argument<BR />
Distribution("dummy 1st entry", Columns("height")); // Column at non-first position -> works<BR /><BR />Distribution("hello"); // not necessary to provide a meaningful (first) argument<BR /><BR />Distribution(Columns("name")); // alias<BR />Distribution(Y("name"));
Betreff: Das Aktualisieren des Spaltenlistenfelds mithilfe der in einer Variablen gespeicherten Liste funktioniert nicht wie erwartet. Ist das so gemeint?Der Scripting Guide bietet einige Erklärungen zur Terminologie Skripthandbuch > Einführung in das Schreiben von JSL-Skripts > JSL-Terminologie
Betreff: Das Aktualisieren des Spaltenlistenfelds mithilfe der in einer Variablen gespeicherten Liste funktioniert nicht wie erwartet. Ist das so gemeint?
So lautet die Terminologie genannt Argumente
- und benannte Argumente sind immer optional – mit und ohne < > im Scripting Index 
Leider nicht explizit vermerkt:
dann ist der offizielle Name des „Indikators“ eines benannten Arguments „ Name " ?
Betreff: Das Aktualisieren des Spaltenlistenfelds mithilfe der in einer Variablen gespeicherten Liste funktioniert nicht wie erwartet. Ist das so gemeint?Offizieller Name? Indikator?
Skripthandbuch > JSL-Bausteine > JSL-Syntaxregeln > JSL-Regeln für Namen
In JSL ist ein Name einfach etwas zum Benennen eines Elements. Wenn Sie einer Variablen im Ausdruck den numerischen Wert 3 zuweisen a = 3 , A ist ein Name.
Betreff: Das Aktualisieren des Spaltenlistenfelds mithilfe der in einer Variablen gespeicherten Liste funktioniert nicht wie erwartet. Ist das so gemeint?Das ist es, was mich verwirrt.
Wir haben gelernt, dass die Spalten("height" ) In
Distribution(Columns("height"));ist ein (optionales) benanntes Argument.
Also was ist Säulen In Distribution(Columns("height")); ?
Aus grammatikalischer Sicht könnte es sich um den „Namen“ handeln, der dem benannten Argument gegeben wurde.
Dies wird jedoch mit der Standarddefinition von kollidieren Name in JSL. (vergleichen: als Name(x))
Ich glaube, ich bin nicht der Erste, der diese Frage stellt – und ich vermute, dass es einen offiziellen Namen für den Namen eines benannten Parameters gibt.
Aber ich hatte nicht das Glück, es in der Dokumentation zu finden.
@Mark_Bailey ?