Wie kann ich eine Formelspalte in eine Variable umwandeln?Ich benutze eine erste Formelspalte als Zwischenergebnis, um die Formel neu zu berechnen abschließend mit einer zweiten formalen Kolumne. Die zweite Spalte verwendet das Ergebnis der ersten Formelspalte.
Gibt es eine einfache Möglichkeit, die erste Formelspalte zu umgehen, indem Sie beispielsweise eine Varibele erstellen? Meine JSL Knolodge ist sehr einfach.
Danke im Voraus.
Re: Wie kann ich eine Formelspalte in eine Variable umwandeln?Danke für deine Antwort.
Könntest du mir zeigen, wie ich das kombinieren kann? col quantile () Zeilenfunktion mit der Matrixversion?
Re: Wie kann ich eine Formelspalte in eine Variable umwandeln?Wie Sie sagten, funktioniert die If-Satement-Formel sehr gut, um die NewDataCorr-Werte zu erhalten.
Ich habe Ihre Datei mit der neuen Spalte aktualisiert: NewDataCorr 2. In dieser Spalte wurde Ihre If-Anweisungsformel verwendet. Anstatt die Werte aus der DataTmp-Spalte zu verwenden, habe ich sie mit der DataTmp-Formel ausgedrückt:
Wenn (: P1 == 0 &: P2
,
: DataRaw
)
In diesem Fall wurde ich von der DataTmp-Spalte los. Wie ist Ihre Meinung zu dieser Lösung?
Re: Wie kann ich eine Formelspalte in eine Variable umwandeln?Die Lösung von Cameron sollte ziemlich schnell sein, selbst in Reihen mit mehr als 100.000 Zeilen.
Eine andere Sache, mit der Funktion col quantile (), wird für jede Zeile in der Datentabellenformel ausgewertet, und das würde die Sache auch etwas verlangsamen. In der Matrixversion wird es nur einmal ausgewertet.
Re: Wie kann ich eine Formelspalte in eine Variable umwandeln?Ich habe die Datei example.jmp hochgeladen. Meine spezifische Frage ist, w Was ist der beste Weg, um die Erstellung der Spalten zu vermeiden: DataTmp und: FlyerTmp, um die Spalten zu erhalten: DataCorr mithilfe der Spalten: P1,: P2 und: DataRaw?
Laut JSL-Benutzern ist es besser, diese Spalten mit Hilfe von Listen oder Martizes zu berechnen, insbesondere wenn die Datensätze groß sind.
Re: Wie kann ich eine Formelspalte in eine Variable umwandeln?Vielen Dank für Ihren JSL-Vorschlag. Ich bin neugierig, das Skript zu testen. Im Moment kann ich die Tihis nicht überprüfen (kein Zugang zu JMP).
Ich frage mich, wie Datenpunkte aus der Ursprungsspalte DataRaw behandelt werden, wenn sie 0 sind.
Re: Wie kann ich eine Formelspalte in eine Variable umwandeln?Danke für deine Antwort.
Ich möchte die tmp-Spalten loswerden, um die Daten so einfach wie möglich zu halten. Die Beispieldatei ist eine sehr einfache Datei zu meiner Frage. In der Praxis enthält der Datensatz etwa 10 bis 15 verschiedene DataRaw-Spalten, die ich auf dieselbe Weise vorbereiten möchte. Es wurden auch andere Spalten hinzugefügt.
Sie haben recht mit der FlyerTmp-Spalte. Es kann in der DataCorr-Spalte enthalten sein. Ich werde Ihre Datei später überprüfen (derzeit kein Zugriff auf JMP).
Re: Wie kann ich eine Formelspalte in eine Variable umwandeln?Nur an etwas gedacht. Sie müssen die Nullen aus dem Temp entfernen, bevor Sie das Quantil berechnen, da diese Nullen eingeschlossen werden. Sie können dies tun, indem Sie dies vor x98 ausführen.
miss_rows = loc(as list(temp),0);
temp[miss_rows] = .;
Sie können dasselbe auch für "final" tun, bevor Sie die neue Spalte erstellen. Dies würde die Notwendigkeit beseitigen, die fehlenden Werte am Ende zu ersetzen.
Re: Wie kann ich eine Formelspalte in eine Variable umwandeln?Vielen Dank, dass Sie Ihre Beispieldatentabelle veröffentlicht haben.
Da Sie Quantile nur für einige Zeilen berechnen möchten, müssen Sie eine neue formelbasierte Spalte haben. Da Sie dies mit dataTmp bereits tun, ist dies ein guter Weg, um fortzufahren. Sie brauchen jedoch nicht flyerTmp, da dies lediglich eine Bedingung ist, die Sie dann in dataCorr verwenden. Sie können diese Bedingung direkt in dataCorr eingeben.
Ich habe das in der beigefügten Datentabelle mit 100.100 Zeilen gemacht. Es ist ziemlich schnell.
Ich bin neugierig, warum Sie sich Sorgen gemacht haben, die Zwischensäule loszuwerden? Intellektuelle Neugier oder eine andere Sorge?
Re: Wie kann ich eine Formelspalte in eine Variable umwandeln?Versuchen Sie so etwas. Die Idee besteht darin, die Daten elementweise mit Vektoren boolescher Werte zu multiplizieren, die Ihre logischen Bedingungen darstellen. Das sollte ziemlich schnell sein, aber ich gebe zu, ich bin weit davon entfernt, ein Experte zu sein, was rechnerisch am effizientesten ist.
dt = Current Data Table();
//Get values for other columns
raw = dt:DataRaw << Get Values;
P1vals = dt:P1 << Get Values;
P2vals = dt:P2 << Get Values;
//Compute equivalent of DataTmp
temp = (P1vals == 0 & P2vals < 3):*raw;
//Compute 98th percentile of temp
x98 = quantile(0.98, temp);
//Compute final column
final = (temp <= x98):*temp;
dt << New Column("DataCorr", << Set Values(final));Das Ergebnis wird 0 enthalten anstatt zu fehlen. Sie können sie mit fehlenden Werten durch etwas ersetzen (wenn jedoch immer noch der ursprüngliche DataCorr in Ihrer Tabelle vorhanden ist, erzeugt das vorherige Skript eine Spalte "DataCorr 2" und diese Codezeile funktioniert nicht in der rechten Spalte).
//Replace 0s with missing
dt:DataCorr[dt << Get Rows Where(:DataCorr == 0)] = .;
Re: Wie kann ich eine Formelspalte in eine Variable umwandeln?Hallo Cameron .
hat die Datei example.jmp angehängt. Was ist der beste Weg, um die Erstellung der Spalten zu vermeiden: DataTmp und: FlyerTmp, um die Spalten zu erhalten: DataCorr mit Hilfe der Spalten: P1,: P2 und: DataRaw?
Dies sollte für Datensätze mit mehr als 100.000 Zeilen gelten.
Thomas
Re: Wie kann ich eine Formelspalte in eine Variable umwandeln?Schauen wir uns nur ein paar Details an:
1 Ist der Wert für alle Zeilen in der ersten Spalte gleich?
2 Skriptieren Sie das Hinzufügen von Spalten?
Möglicherweise lässt sich das erste Ergebnis als einzige Spalte in einer Matrix im Speicher berechnen. Wenn Sie diese Werte wünschen, holen Sie sie einfach aus der Matrix und erstellen Sie eine neue Spalte mit diesen Werten. Dies ist häufig schneller als das Hinzufügen eines Colums und das Aktualisieren in der Tabelle (für wirklich große Tabellen).
Besser noch, führen Sie beide Berechnungen in einer Matrix aus (im Speicher, nicht in der Tabelle) und buchen Sie die Ergebnisse dann wieder in die Tabelle.
-Wenn alle Werte in Spalte 1 gleich sind, dann berechnen Sie dies vielleicht einfach in einem Skript und fügen Sie es der Tabelle als Tabelle hinzu
Variable und referenzieren Sie die Variable in Spalte 2.
Viele gute Optionen, aber sie hängen alle davon ab, was Sie zu tun versuchen.
Re: Wie kann ich eine Formelspalte in eine Variable umwandeln?Wenn Sie genauere Hilfe benötigen, müssen Sie ein Arbeitsbeispiel posten.
Re: Wie kann ich eine Formelspalte in eine Variable umwandeln?Danke für die Lösung. Es klappt. Dies kann jedoch die Berechnung verlangsamen, falls einige Zustände in der Formel verwendet werden.
Re: Wie kann ich eine Formelspalte in eine Variable umwandeln?Können Sie die Formel einfach aus der ersten Spalte kopieren und in die Formel für die zweite Spalte einfügen, wo immer auf die erste Spalte verwiesen wird?