Iterierende SpaltenIch arbeite an einem Skript, um eine Liste von Spalten zu durchlaufen, und bin auf ein Problem gestoßen. Ich muss in der Lage sein, die Spaltenreferenz in der Form „:Technology Default“ auszugeben, aber jede Methode, die ich mir angesehen habe, gibt „Column("Technology Default")" aus. Ich habe online nachgeschaut und es scheint, dass die Referenz, die ich brauche, eine „Spaltenreferenz“ ist, obwohl ich eine „Spaltenobjektreferenz“ erhalte. Gibt es eine einfache Möglichkeit, das zu tun, wonach ich suche?
Automatisierung und SkriptingBetreff: Spalten iterierenWas versuchen Sie zu tun? Sie haben AsColumn() und Column() (und manchmal Eval()), die Sie verwenden können (für dieses Format sollte As Column() im Allgemeinen funktionieren, aber Sie müssen es möglicherweise mit Ausdrücken verwenden).
Bearbeiten:
Einige Links:
Wenn Sie dieses Format beispielsweise in einer Formel erhalten möchten, beginne ich normalerweise mit der Methode EvalExpr + Name Expr + As Column.
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
colname = "height";
Eval(EvalExpr(
dt << New Column(Eval Insert("^colname^*^colname^"), Numeric, Continuous, Formula(
Expr(Name Expr(AsColumn(dt, colname))) * Expr(Name Expr(AsColumn(dt, colname)))
));
));
Betreff: Spalten iterierenMein Endziel ist, etwas zu haben, das ich in einer Formel in einer neuen Spalte verwenden kann. Formeln erkennen Spalten anscheinend nur, wenn sie als „:Spalte“ bezeichnet werden. Jedenfalls mithilfe der Informationen, die ich unter diesem Link gefunden habe.
Gelöst: So ersetzen Sie doppelte Anführungszeichen in Zeichenfolgen - JMP-Benutzergemeinschaft
Ich habe mir eine Methode mit brachialer Gewalt ausgedacht, um das Ziel zu erreichen. Sie ist nicht elegant, aber sie scheint zu funktionieren. Ich bin immer noch offen für Vorschläge, wie man dies offizieller machen kann.
Tschüss
SpannerHead
dt = Current Data Table();
lst = dt << Get Column Names(string);
For(i=1,i<=NItems(lst),i++,
colName = lst[i];
col = Column(colName);
Colstring = (":"||colName);
Colref = Parse( Eval Insert(Colstring));
Show(Colref););Betreff: Spalten iterierenIch werde mich in JMP im Allgemeinen nicht mit derartigen Spaltenverweisen herumschlagen, da deren Verwaltung zu mühsam ist -> ich verwende Zeichenfolgen der Spaltennamen und verwende sie nach Bedarf mit Column(), As Column(), Eval() oder NameExpr(AsColumn()) (wenn ich aus irgendeinem Grund Spaltenverweise (Column("etwas")) verwenden muss, konvertiere ich diese mit << Get Name in Zeichenfolgen, wenn ich diese verwenden muss).
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
col1 = "height";
col2 = "weight";
<BR />// Good way but can be (sometimes) difficult to read
Eval(EvalExpr(
dt << New Column("mycol1", Numeric, Continuous, Formula(
Expr(Name Expr(AsColumn(dt, col1))) * Expr(Name Expr(AsColumn(dt, col2)))
))
));
<BR />// might be easier to read
Eval(Substitute(
Expr(dt << New Column("mycol2", Numeric, Continuous, Formula(
_firstcol_ * _secondcol_
))),
Expr(_firstcol_), Name Expr(AsColumn(dt, col1)),
Expr(_secondcol_), Name Expr(AsColumn(dt, col2))
));
// "reusable"
ref1 = Name Expr(AsColumn(dt, col1)); // this will return :height BUT you will generally still need Name Expr() to use it
ref2 = Name Expr(AsColumn(dt, col2));
// wont work, because ref1 will get evaluated for "current" row
Eval(EvalExpr(
dt << New Column("mycol3", Numeric, Continuous, Formula(
Expr(ref1) * Expr(ref2)
))
));
// will work
Eval(EvalExpr(
dt << New Column("mycol3", Numeric, Continuous, Formula(
Expr(Name Expr(ref1)) * Expr(Name Expr(ref2))
))
));
Wenn Sie versucht haben, nur
dt << New Column("mycol4", Numeric, Continuous, Formula(
ref1 * ref2
));
Sie erhalten eine Formel wie ref1*ref2, da diese nicht in der Formel ausgewertet werden

Noch ein paar Links:
Betreff: Spalten iterierenIch bin vielleicht auf dem Holzweg, aber Ihr Problem scheint darin zu liegen, dass Sie in Ihren Formeln Spaltenreferenzen verwenden und diese Referenzen beim Erstellen der Formeln auflösen müssen. Jarmos Beispiel zeigt genau das, aber es kann etwas verwirrend sein. Im Folgenden wird versucht, das Problem und die Lösung anhand eines sehr einfachen Beispiels zu erklären.
// Here is a sample script, that creates a new data table
// with 2 columns, and what we want to do, is to simply
// put the value 1 into column c1, and a 2 into column c2
// In the first example, it is done by simply running a
// for() loop and taking the index variable, "i" and using it in
// the formula and squaring it's value.
Names Default To Here( 1 );
dt = New Table( "Example" );
dt<< add rows(1);
For( i = 1, i <= 2, i++,
dt << New Column( "c" || Char( i ),
formula( i^2 )
)
);
// When each column was created, it used the value of i at that
// time within the formula. Thus, for c1, the value of i was 1,
// and for c2 it was 4.
// So now, if we rerun the formulas, it will take the value of
// i at the time of rerunning each formula.
wait(5);
dt<<RERUN formulas=""></RERUN>
<P>Ich hoffe das ist hilfreich</P>Betreff: Spalten iterierenstatt der "rohen Gewalt"
Colstring = (":"||colName);
Colref = Parse( Eval Insert(Colstring));ein eleganterer Weg ist:
Colref= Name Expr (As Column(colName))
-> siehe Antwort von @jthi .
Es hat bereits vielen anderen Benutzern geholfen: Ausdrucksbehandlung in JMP: Tipps und Falltüren
Übrigens:
in Ihrem Beispiel können Sie die Spalteref( s) direkt über „Get Column Names“ abrufen – entfernen Sie einfach das STRING -Argument.
Sie haben kein ":" davor, aber das ist nur Kosmetik 
dt = Current Data Table();
lst = dt << Get Column Names();
For( i = 1, i <= N Items( lst ), i++,
Show( lst[i] );
Show( lst[i][5] );
);
Betreff: Spalten iterierenWenn Sie Spaltennamen mit vorangestellten „:“ bevorzugen, können Sie einen Trick anwenden:
Fragen Sie jeden von ihnen nach dem Namen.
columnNames = current data table() << Get Column Names;
for (i=1, i<= Nitems(columnNames),i++,columnNames[i]<< get name() );
show(columnNames) // -> column names with leading ":"