テーブル変数と列で計算する最良の方法は何ですか?JSL (TestJSL) スクリプトは、2 つのテーブル変数を作成します。 スクリプト内では、IF ステートなどを適用して、既存の列 :D0 から新しい列 :D1 を計算するために使用されています。
:D1 のかなり複雑な式を使用するよりも、これを行うためのより良い方法はありますか?
Re: テーブル変数と列で計算する最良の方法は何ですか?再度、感謝します。 更新スクリプトを実行することで機能するようになりました。 数式の魅力は、データの更新が自動で行われることです。 約10万行の式でこれを行うのは危険ですか(エラーを回避します....)? 式に固執する場合、最初の部分が計算されている列 :DT を生成する方が良いでしょう If( :P1 == 0 & :P2 < :Threshold, :D0 ) ある場合、スクリプトはどのようになりますか対応する : D1a、.D1b 列を生成するための D0a :D0b 列はいくつかありますか?
Re: テーブル変数と列で計算する最良の方法は何ですか?あなたの式はうまくいったので、それを使うことができます。 数式を維持するのが難しいことに同意します。
別の方法として、テーブルにスクリプトを追加します。 分位数としきい値を変更してスクリプトを実行する方法を示す JSL を ( wait(5) の後に) 追加しました。 またはインタラクティブに、2 つの変数を変更し、[D1 の更新] をクリックします。
最も使いやすいと思われる方法を使用してください。
//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") ;
Re: テーブル変数と列で計算する最良の方法は何ですか?解決策をありがとう。 それは正常に動作します。 ただし、JSL が実行され、テーブル変数 "Quantile" と "Threshold" を再調整した後、新しい列 :D1 は "Threshold" の変更にのみ応答し、"Quantile" の変更には応答しません。 これは修正できますか?
@gzmorgan0書きました:
設定値を使用するテーブル式とテーブル変数を使用せずにこれを行う方法は複数あります。
スクリプトが式を使用したため、この代替 JSL は式を使用します。 列の数式がなくても問題が解決しない場合は、分位数、しきい値、qq の再計算、D1 の再計算を求めるスクリプトなど、他の方法を使用できます。
//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) )
);
解決策をありがとう。 それは正常に動作します。 ただし、JSL が実行され、テーブル変数 "Quantile" と "Threshold" を再調整した後、新しい列 :D1 は "Threshold" の変更にのみ応答し、"Quantile" の変更には応答しません。
Re: テーブル変数と列で計算する最良の方法は何ですか?設定値を使用するテーブル式とテーブル変数を使用せずにこれを行う方法は複数あります。
スクリプトが式を使用したため、この代替 JSL は式を使用します。 列の数式がなくても問題が解決しない場合は、分位数、しきい値、qq の再計算、D1 の再計算を求めるスクリプトなど、他の方法を使用できます。
//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) )
);