Wie kann ich eine Tabelle mit bedingten Teilmengen erstellen, ohne direkt einen Spaltennamen aufzurufen?Die ersten drei Zeilen dieses Skripts erstellen eine neue Datentabelle, deren Höhen weniger als 60 betragen. Dieses Teil läuft gut.
Für die Funktion, die ich entwickeln möchte, möchte ich eine Spalte auf andere Weise referenzieren als mit :height.
Ich habe vier verschiedene Möglichkeiten ausprobiert, auf die Spalte zu verweisen, aber keine davon funktioniert. Ich habe die Spaltenfunktion verwendet und die Spaltenreferenzfunktion erhalten (siehe unten).
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
//This one works
dtSubgroup = dt << Subset(Rows(dt << get rows where(:height < 60)));
//None of these work
dtSubgroup = dt << Subset(Rows(dt << get rows where(Column("height") < 60)));
dtSubgroup = dt << Subset(Rows(dt << get rows where(Column(dt, "height") < 60)));
dtSubgroup = dt << Subset(Rows(dt << get rows where(Column(4) < 60)));
refList = dt << Get Column Reference( {"height"} );
dtSubgroup = dt << Subset(Rows(dt << get rows where(refList[1] < 60)));Gibt es einen Grund, warum sie nicht funktionieren?
Irgendwelche Lösungsvorschläge?
Ich danke Ihnen für Ihre Hilfe.
Betreff: Wie kann ich eine Tabelle mit bedingten Teilmengen erstellen, ohne direkt einen Spaltennamen aufzurufen?Es scheint seltsam, nicht wahr?
Es kommt auf den Kontext an. Sie könnten dies beispielsweise in einer Spaltenformel verwenden:
If( Column("height") < 60, 0, 1 ); // implicit assignment of Row() = current row number
Oder Sie können es in der Funktion „For Each Row()“ verwenden, um dasselbe in einem Skript zu erreichen:
For Each Row(
// implicit assignment of Row() = current row number
If( Column("height" ) < 60,
:status = "small",
:status = "large"
)
)
Der Kontext der Spaltenformel und der obigen Iteration ist so, dass JMP implizit die Row()-Funktion für Sie festlegt. Daher verwendet JMP diese Informationen, um herauszufinden, wo der Wert abgerufen oder gespeichert werden soll (d. h. welche Zeile). Das ist hier nicht der Kontext des allgemeinen Falles:
dtSubgroup = dt << Subset(Rows(dt << get rows where(Column("height") < 60)));
Die Datentabelle verwendet nicht implizit die aktuelle Zeilennummer, wenn Sie versuchen, den Vergleich auszuwerten. Sie erzwingen dies, indem Sie den leeren Indexoperator [ ] hinzufügen.
Betreff: Wie kann ich eine Tabelle mit bedingten Teilmengen erstellen, ohne direkt einen Spaltennamen aufzurufen?Danke, das hat genau das getan, was ich wollte.
Darf ich fragen, warum das funktioniert?
Ich habe die Spaltenfunktion viele Male verwendet, ohne eckige Klammern zu verwenden.
Was ist an diesem Fall anders? Welche Regel ist zu beachten?Betreff: Wie kann ich eine Tabelle mit bedingten Teilmengen erstellen, ohne direkt einen Spaltennamen aufzurufen?Versuchen Sie, nach der schließenden Klammer der Column()-Funktion leere eckige Klammern anzuhängen. So was:
Column("height")[] < 60
Hilft diese Änderung?