Wie rechnet man am besten mit Tabellenvariablen und -spalten?Ein JSL-Skript (TestJSL) erstellt zwei Tabellenvariablen. Innerhalb des Skripts werden sie verwendet, um eine neue Spalte :D1 aus der vorhandenen Spalte :D0 zu berechnen, indem IF-Zustände usw. angewendet werden.
Gibt es einen besseren Weg, dies zu tun, als mit der ziemlich komplexen Formel für :D1?
Betreff: Wie rechnet man am besten mit Tabellenvariablen und -spalten?Danke noch einmal. Jetzt funktioniert es, indem Sie das Update-Skript ausführen. Der Reiz der Formel besteht darin, dass die Datenaktualisierung automatisch erfolgt. Ist es riskant, dies mit der Formel für etwa 100.000 Zeilen zu tun (um Fehler zu vermeiden …)? Wenn ich bei der Formel bleibe, wäre es besser, eine Spalte :DT zu generieren, in der der erste Teil berechnet wird. If( :P1 == 0 & :P2 < :Threshold, :D0 ) Wie würde ein Skript in diesem Fall aussehen? Gibt es mehrere: D0a :D0b-Spalten, um die entsprechenden :D1a-, .D1b-Spalten zu generieren?
Betreff: Wie rechnet man am besten mit Tabellenvariablen und -spalten?Nun, Ihre Formel hat funktioniert, Sie können sie also verwenden. Ich stimme zu, dass es schwierig ist, die Formel beizubehalten.
Hier ist eine Alternative: Fügen Sie der Tabelle ein Skript hinzu. Ich habe die JSL (nach dem wait(5) ) hinzugefügt, die zeigt, wie man das Quantil und den Schwellenwert ändert und das Skript ausführt. Oder ändern Sie interaktiv die beiden Variablen und klicken Sie auf Update D1.
Verwenden Sie die Methode, die für Sie am einfachsten ist.
//Create Table Variable
dt = currentdatatable();
dt << Set Table Variable( "Quantile", 0.9 );
dt << Set Table Variable( "Threshold", 1 );
dt << New Column("D1", Numeric, Continuous);
dt << New Script ("Update D1",
dt = current data table();
_xx = dt << get rows where(:P1 ==0 & :P2 <:Threshold);
dt << Set Table Variable("QQ", Quantile(dt:Quantile, dt:D0[_xx] ));
qq = Quantile(dt:Quantile, dt:D0[_xx] );
//caption(char(qq)); wait(2); caption(remove); //uncomment to test
dt:D1 << Set Each Value(
If(:P1 ==0 & :P2 <:Threshold & :D0< qq, :D0, empty())
);
);
wait(5);
dt << Set Table Variable( "Quantile", 0.6 );
dt << Set Table Variable( "Threshold", 1.8 );
dt << Run Script("Update D1") ;
Betreff: Wie rechnet man am besten mit Tabellenvariablen und -spalten?Vielen Dank für Ihre Lösung. Es funktioniert gut. Nachdem die JSL jedoch ausgeführt wurde und ich die Tabellenvariablen „Quantile“ und „Threshold“ neu anpasse, reagiert die neue Spalte :D1 nur auf Änderungen an „Threshold“ und nicht auf Änderungen an „Quantile“. Könnte das behoben werden?
@gzmorgan0 schrieb:
Es gibt mehrere Möglichkeiten, dies zu tun, ohne eine Tabellenformel und Tabellenvariablen mit festgelegten Werten zu haben.
Da Ihr Skript eine Formel verwendet, verwendet diese alternative JSL eine Formel. Wenn Sie ohne eine Spaltenformel auskommen, können andere Methoden verwendet werden, einschließlich eines Skripts, das nach Quantil und Schwellenwert fragt, dann qq neu berechnet und D1 neu berechnet.
//Create Table Variable
dt = currentdatatable();
dt << Set Table Variable( "Quantile", 0.9 );
dt << Set Table Variable( "Threshold", 1 );
_xx = dt << get rows where(:P1 ==0 & :P2 <:Threshold);
dt << Set Table Variable("QQ", Quantile(dt:Quantile, dt:D0[_xx] ));
dt << New Column("D1", Numeric, Continuous,
Formula( If(:P1 ==0 & :P2 <:Threshold & :D0< :QQ, :D0) )
);
Vielen Dank für Ihre Lösung. Es funktioniert gut. Nachdem die JSL jedoch ausgeführt wurde und ich die Tabellenvariablen „Quantile“ und „Threshold“ neu anpasse, reagiert die neue Spalte :D1 nur auf Änderungen an „Threshold“ und nicht auf Änderungen an „Quantile“.
Betreff: Wie rechnet man am besten mit Tabellenvariablen und -spalten?Es gibt mehrere Möglichkeiten, dies zu tun, ohne eine Tabellenformel und Tabellenvariablen mit festgelegten Werten zu haben.
Da Ihr Skript eine Formel verwendet, verwendet diese alternative JSL eine Formel. Wenn Sie ohne eine Spaltenformel auskommen, können andere Methoden verwendet werden, einschließlich eines Skripts, das nach Quantil und Schwellenwert fragt, dann qq neu berechnet und D1 neu berechnet.
//Create Table Variable
dt = currentdatatable();
dt << Set Table Variable( "Quantile", 0.9 );
dt << Set Table Variable( "Threshold", 1 );
_xx = dt << get rows where(:P1 ==0 & :P2 <:Threshold);
dt << Set Table Variable("QQ", Quantile(dt:Quantile, dt:D0[_xx] ));
dt << New Column("D1", Numeric, Continuous,
Formula( If(:P1 ==0 & :P2 <:Threshold & :D0< :QQ, :D0) )
);