Name zitiert einen seltsamen SpaltennamenIch versuche, einen Spaltennamen in einen Fit-Model-Ausdruck einzufügen. Dazu muss ich seltsame Zeichen in Spaltennamen maskieren. Dazu verwenden wir die :"name"n-Konvention. Wie komme ich also von einem String-Spaltennamen zu diesem Format?
colListY = {"Plating Thickness (m\!"\!")"};
//This doesn't work
newcolumnref = eval insert("\[:"^colListY[1]^"n]\");
//Looking for this end result
:"Plating Thickness (m\!"\!")"nWas ich dann irgendwo einfügen kann, zum Beispiel:
insert into(expr(Y()), newcolumnref);
Kennt jemand eine robuste Möglichkeit, dies zu tun?
Datenexploration und -visualisierungBetreff: Name zitiert einen seltsamen Spaltennamen@Mark_Bailey
Ach, so einfach! Großartig!!!
Ich war überrascht, von zu hören @pauldeen :
https://community.jmp.com/t5/Discussions/Name-quote-a-strange-column-name/mp/415735/highlight/true#M66485
Das
Beim Erstellen des Fit-Model-Skripts kann das Column()-Format nicht verwendet werden:</CODE><HR /></BLOCKQUOTE><P> </P><PRE><CODE class=" language-jsl">Fit Model(
//Y( :"Plating Thickness (m\!"\!")"n ), <- works
Y(column("Plating Thickness (m\!"\!"")), //<- does not workOK, wenn es so ist, was wäre die einfachste Lösung, die Spalte ohne zu bekommen? Spalte() ...
Nun war ich überrascht, dass es tatsächlich funktionierte (durch die Ausführung Ihres Codes).
Und bin zum alten Sniplet zurückgekehrt – und es hat nicht funktioniert.
Woah!
Das Rätsel wird gelöst, wenn Sie beide Codezeilen genau untereinander platzieren:

-> Glücklicherweise ist für Fit Model keine ausgefallene Nicht-Column()-Codierung erforderlich.
Betreff: Name zitiert einen seltsamen SpaltennamenNames Default To Here( 1 );
dt = New Table( "plating",
New Column( "Plating Thickness (m\!"\!")", Set Values( [1, 2, 3, 4] ) ),
New Column( "X", Set Values( [12, 26, 33, 39] ) )
);
col = Column( dt, "Plating Thickness (m\!"\!")" );
Fit Model(
Y( col ), // <- works :)
Effects( :X ),
Personality( "Standard Least Squares" ),
Run
);
Betreff: Name zitiert einen seltsamen Spaltennamen
dt = New Table( "plating",
Add Rows( 4 ),
New Column( "Plating Thickness (m\!"\!")",Set Values( [1, 2, 3, 4] )),
New Column( "X",Set Values( [12, 26, 33, 39] ))
);
colListY = {"Plating Thickness (m\!"\!")"};<BR /><BR /><BR />
newcolumnref = Name Expr(AsColumn(colListY[1])); // -> :"String"n<BR />
Fit Model(
//Y( :"Plating Thickness (m\!"\!")"n ), <- works
//Y(column("Plating Thickness (m\!"\!"")), //<- does not work
Y(newcolumnref), // <- works :)
Effects(:X),
Personality( "Standard Least Squares" )
);aus
https://community.jmp.com/t5/Discussions/Need-help-with-expressions-column-references-formulas-and-column/mp/490220/highlight/true#M73282
Betreff: Name zitiert einen seltsamen SpaltennamencolListY = {"Plating Thickness (m\!"\!")"};
dt = Open( "$sample_data/big class.jmp" );
dt:age << setname( colListY[1] );
Eval(
Eval Expr(
dt << New Column( "test",
Numeric,
"Continuous",
Format( "Fixed Dec", 12, 2 ),
Formula( Column( Expr( colListY[1] ) )[] ),
Set Display Width( 78 )
)
)
);Das leere [ ] weist JMP an, die Spalte für die aktuelle Zeile auszuwerten.
Durch die Erstellung solcher Spaltenformeln werden die zugrunde liegenden Spaltenabhängigkeiten wahrscheinlich vor dem Formelauswerter von JMP verborgen. sehen Diskussion . Wenn Sie Formelspalten haben, die von anderen Formelspalten abhängig sind, kann JMP möglicherweise keinen Blick auf diese Indirektion werfen, um herauszufinden, was zuerst ausgewertet werden soll.
Betreff: Name zitiert einen seltsamen SpaltennamenDas führt bei mir zu einem Spaltenformelfehler
Betreff: Name zitiert einen seltsamen Spaltennamen(Ohne es zu versuchen, könnte also falsch sein)
Formula( column(expr(colListY[1])) - :height ),
Ich denke, Sie möchten den Ausdruck in der Spalte. Auf diese Weise wird die Spaltenfunktion später unter Verwendung der zuvor erfassten Zeichenfolge ausgewertet.
Betreff: Name zitiert einen seltsamen Spaltennamen@XanGregg Spaltenformeln funktionieren auf diese Weise nicht und die speziellen Anführungszeichenmethoden funktionieren:
colListY = {"Plating Thickness (m\!"\!")"};
dt = Open( "$sample_data/big class.jmp" );
dt:age << setname( colListY[1] );
eval(eval expr(dt << New Column( "test",
Numeric,
"Continuous",
Format( "Fixed Dec", 12, 2 ),
Formula( expr(column(colListY[1])) - :height ),
Set Display Width( 78 )
)));Es wird eine Funktionsspalte erstellt, in der die Formel lautet:
Column( "Plating Thickness (m\!"\!")" ) - /*###*/:height/*###*/
was nicht wertet.
Das macht:
WrapColumns = Function({ColName},{default local},
ReturnList = {};
If(is list(ColName),
For(i=1, i<=n items(ColName), i++,
insert into(ReturnList, parse(":" || Log Capture( Print( ColName[i] ) ) || "n"))
);
,
insert into(ReturnList, parse(":" || Log Capture( Print( ColName ) ) || "n"))
);
Return(ReturnList);
);
eval(eval expr(dt << New Column( "test2",
Numeric,
"Continuous",
Format( "Fixed Dec", 12, 2 ),
Formula( expr(WrapColumns(colListY)[1]) - :height ),
Set Display Width( 78 )
)));Kennen Sie eine Möglichkeit, dies mit dem Column()-System zu beheben?
Betreff: Name zitiert einen seltsamen SpaltennamenNach sorgfältigem Testen und Durchgehen einiger meiner Skripte konnte ich es nicht erneut zum Scheitern bringen. Danke für das Kontrollieren!
Betreff: Name zitiert einen seltsamen SpaltennamenDas ist eine tolle Frage!
Betreff: Name zitiert einen seltsamen SpaltennamenDas ist eine tolle Frage!
Betreff: Name zitiert einen seltsamen Spaltennamen@XanGregg Jetzt, wo ich es mit Ihrem Code teste, funktioniert es auch hier. Lassen Sie mich nachforschen und sehen, ob ich das fehlgeschlagene Beispiel vollständiger wiedergeben kann ...
Betreff: Name zitiert einen seltsamen SpaltennamenZum Spaß habe ich den Code auf JMP 11.2.1 zurückgesetzt und er funktioniert großartig.
Betreff: Name zitiert einen seltsamen SpaltennamenKönnen Sie den Teil „funktioniert nicht“ näher erläutern? Ich habe Versionen zurück zu JMP 15 ausprobiert und Folgendes scheint zu funktionieren. Vielleicht übersehe ich einen Teil des Problems.
Data Table( "Big Class" ):weight << Set Name( "weight\!"\!"" );
Fit Model(
Y( Column( "weight\!"\!"" ) ),
Effects( :age, :sex, :height ),
Personality( "Standard Least Squares" ),
Run()
);
Betreff: Name zitiert einen seltsamen SpaltennamenZur Erklärung für alle, die zuschauen: Die Druckfunktion macht zwei Dinge: Sie maskiert die internen Anführungszeichen (und andere Sonderfälle) und fügt externe Anführungszeichen hinzu. Das erzeugt eine gültige Zeichenfolge, und Pauls Code fügt dann ein : vor und ein n danach hinzu und analysiert das Ergebnis in eine JSL Spaltennamenkonstante . Es könnte eine tatsächliche Spalte geben oder auch nicht Spaltennamenkonstante Kann bei Verwendung in einem Skript angehängt werden. Die Spalte muss nicht vorhanden sein, wenn Pauls Code ausgeführt wird. Ohne die Funktion „print()“ bin ich mir nicht sicher, welche Funktion ich verwenden würde, um das Escapezeichen auszuführen (die Regeln sind zu kompliziert, um sie selbst zu schreiben). Da der ursprüngliche Name eingebettete Anführungszeichen enthielt, muss er vor dem Einfügen mit einem Escapezeichen versehen werden verwandelte sich in ein Spaltennamenkonstante .
Wenn die Datentabelle geöffnet ist, können Sie die Funktion „column()“ auf die gleiche Weise verwenden, um eine zu erhalten Spaltenobjekt das (ich bin mir ziemlich sicher) kann an denselben Orten verwendet werden wie das Spaltennamenkonstante erscheinen kann. Das Spaltenobjekt bezieht sich auf eine echte Spalte, zumindest bis die Tabelle geschlossen wird. Starten einer Plattform mit abgelaufener Gültigkeitsdauer Spaltenobjekt oder ein Spaltennamenkonstante die nicht mit einer Tabellenspalte übereinstimmt, führt zu einer erwarteten Fehlermeldung.
@XanGregg
Betreff: Name zitiert einen seltsamen SpaltennamenAktualisiert mit Craiges Feedback, danke für das 1/i!
WrapColumns = Function({ColName},{default local},
ReturnList = {};
If(is list(ColName),
For(i=1, i<=n items(ColName), i++,
insert into(ReturnList, parse(":" || Log Capture( Print( ColName[i] ) ) || "n"))
);
,
insert into(ReturnList, parse(":" || Log Capture( Print( ColName ) ) || "n"))
);
Return(ReturnList);
);Betreff: Name zitiert einen seltsamen SpaltennamenEs Ist zu kompliziert. Sie können regex() wahrscheinlich durch trim() ersetzen, da das alles ist, was es tut. Ursprünglich dachte ich, es würde die äußeren Anführungszeichen entfernen, die print() hinterlässt. (Bearbeiten: und es ist überhaupt kein Trimmen erforderlich, damit die Eingabe analysiert werden kann!)
Möglicherweise haben Sie [1] an der Stelle, an der Sie in Ihrem Beispiel [i] benötigen.
Betreff: Name zitiert einen seltsamen SpaltennamenDanke, Craige. Das scheint komplizierter zu sein, als es sein sollte, aber es funktioniert 
Für alle, die dies versuchen, habe ich Craiges Lösung in eine Funktion eingefügt:
WrapColumns = Function({ColName},{default local},
ReturnList = {};
If(is list(ColName),
For(i=1, i<=n items(ColName), i++,
insert into(ReturnList, parse(":" || Regex( Log Capture( Print( ColName[1] ) ), "^\s*(.*)\s*$", "\1" ) || "n");)
);
,
insert into(ReturnList, parse(":" || Regex( Log Capture( Print( ColName ) ), "^\s*(.*)\s*$", "\1" ) || "n");)
);
Return(ReturnList);
);Betreff: Name zitiert einen seltsamen SpaltennamenWeitere Hinweise:
Ich habe in der Spaltenfunktion explizit auf die Tabelle verwiesen. Könnte einen Unterschied machen, wenn mehrere Tische geöffnet sind.
Wenn Sie Zeichenfolgen verketten, kann dies der Fall sein. Sie können immer :"height"n verwenden, auch wenn dies nicht erforderlich ist (z. B. Höhe).
colreftxt = ":" || Regex( Log Capture( Print( colListY[1] ) ), "^\s*(.*)\s*$", "\1" ) || "n";
write(colreftxt);
:"Beschichtungsdicke (m\!"\!")"n
</CODE>was richtig entgangen werden könnte. Die Ausdrucksmanipulation wird wahrscheinlich einfacher sein als das Parsen von so zusammengesetztem Text.</P><P> </P><P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-415759" slang="en-US" mode="NONE">Betreff: Name zitiert einen seltsamen Spaltennamen</LINGO-SUB><LINGO-BODY id="lingo-body-415759" slang="en-US" mode="NONE"><P>Versuchen Sie diese Kombination der beiden Antworten:</P><PRE><CODE class=" language-jsl">colListY = {"Plating Thickness (m\!"\!")"};
dt = Open( "$sample_data/big class.jmp" );
dt:age << setname( colListY[1] );
script = Expr(
Fit Model(
Y( F1 ),
Effects( :height ),
Personality( "Standard Least Squares" ),
Run( F1 << {Plot Actual by Predicted( 1 ), Plot Residual by Predicted( 1 ), Plot Effect Leverage( 1 )} )
)
);
Substitute Into( script, Expr( F1 ), Column( dt, colListY[1] ) );
Write( Name Expr( script ) );
/*
Fit Model(
Y( Column( "Plating Thickness (m\!"\!")" ) ),
Effects( :height ),
Personality( "Standard Least Squares" ),
Run(
Column( "Plating Thickness (m\!"\!")" ) << {Plot Actual by Predicted( 1 ),
Plot Residual by Predicted( 1 ), Plot Effect Leverage( 1 )}
)
)
*/
Eval( script );
run with column substitutedrun with column substitutedmit ersetzter Spalte ausführen
Betreff: Name zitiert einen seltsamen Spaltennamen@txnelson Das Problem besteht darin, dass beim Erstellen des Fit-Model-Skripts das Column()-Format nicht verwendet werden kann:
Fit Model(
//Y( :"Plating Thickness (m\!"\!")"n ), <- works
Y(column("Plating Thickness (m\!"\!"")), //<- does not work
Effects(
:"Shift-temp"n, :Position, :Subgroup, :"Shift-temp"n * :Position,
:"Shift-temp"n * :Subgroup, :Position * :Subgroup
),
Personality( "Standard Least Squares" )
);@Craige_Hales Der Benutzer wählt die Spalten mit einer Col-Listbox() aus und ich übergebe ihm eine << get items-Nachricht. Dadurch erhalte ich die Liste der Spaltennamen als Zeichenfolge. Ich konnte diese Spaltennamen in der Tabelle finden und die Spaltennummer finden, aber beim Zusammenstellen des Effektausdrucks kann ich mit dieser Methode die oben gezeigten Interaktionen nicht erstellen.
Gibt es eine Möglichkeit, eine Ausdrucksverkettung durchzuführen, um mit Namens-Escape von der Zeichenfolge zur Spaltenreferenz zu gelangen?
Betreff: Name zitiert einen seltsamen SpaltennamenWenn Sie vermeiden können, den Namen der Spalte als Zeichenfolge abzurufen, und stattdessen das Spaltenobjekt abrufen, ist dies möglicherweise einfacher. Unten ist cols eine Liste von Spaltenobjekten, nicht deren Namen.
colListY = {"Plating Thickness (m\!"\!")"};
dt = Open( "$sample_data/big class.jmp" );
dt:age << setname( colListY[1] );
cols = dt << getcolumnnames;// don't use the string keyword
/* {name, "Plating Thickness (m\!"\!")"n, sex, height, weight} */
script = Expr(
Fit Model(
Y( :weight ),
Effects( F1 ),
Personality( "Standard Least Squares" ),
Run(
:weight << {Plot Actual by Predicted( 1 ), Plot Residual by Predicted( 1 ),
Plot Effect Leverage( 1 )}
)
)
);
Substitute Into( script, Expr( F1 ), cols[2] );
Write( Name Expr( script ) );
/*
Fit Model(
Y( :weight ),
Effects( "Plating Thickness (m\!"\!")"n ),
Personality( "Standard Least Squares" ),
Run(
:weight << {Plot Actual by Predicted( 1 ), Plot Residual by Predicted( 1 ),
Plot Effect Leverage( 1 )}
)
);
*/Betreff: Name zitiert einen seltsamen SpaltennamenSie können die Funktionen „Spalte“ oder „Als Spalte“ verwenden, um den komplexen Spaltennamen zu schützen
colListY = {"Plating Thickness (m\!"\!")"};
newcolumnref = eval insert("column(\!"^colListY[1]^\!")");