使用表變數和列進行計算的最佳方法是什麼?JSL (TestJSL) 腳本建立兩個表格變數。 在腳本中,它們用於透過應用 IF 狀態等從現有列 :D0 計算新列 :D1。
有沒有比使用相當複雜的 :D1 公式更好的方法來做到這一點?
回覆:使用表格變數和列進行計算的最佳方法是什麼?再次感謝。 現在,透過執行更新腳本就可以了。 公式的魅力在於數據更新是自動完成的。 使用大約 100k 行的公式執行此操作是否有風險(避免錯誤...)? 如果我堅持使用公式,最好產生一個列 :DT 來計算第一部分 If( :P1 == 0 & :P2 < :Threshold, :D0 ) 如果存在腳本會是什麼樣子有幾個:D0a:D0b列才能產生對應的:D1a,.D1b列?
回覆:使用表格變數和列進行計算的最佳方法是什麼?嗯,你的公式有效,所以你可以使用它。 我同意公式很難維護。
這是一個替代方案,將腳本新增到表中。 我添加了 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") ;
回覆:使用表格變數和列進行計算的最佳方法是什麼?感謝您的解決方案。 效果很好。 但是,執行 JSL 後,我重新調整表變數“分位數”和“閾值”,新列 :D1 僅響應“閾值”的更改,而不響應“分位數”的更改。 這個問題可以解決嗎?
@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 後,我重新調整表變數“分位數”和“閾值”,新列 :D1 僅響應“閾值”的更改,而不響應“分位數”的更改。
回覆:使用表格變數和列進行計算的最佳方法是什麼?有多種方法可以實現此目的,無需使用設定值的表公式和表變數。
由於您的腳本使用了公式,因此此替代 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) )
);