您好,林试图基于其他表行从一个表中选择值。
我当前的代码使用循环,但是在大表上它确实很慢,我想找到一种提高循环效率的方法。
我的目标是从数据中删除所有异常值,因此我首先计算分位数,然后在主表上循环以查找匹配的行。最后,我删除此行。
有没有办法使用我的条件“选择位置”逻辑而不循环?也许有点像但有逻辑。谢谢!
dt << Select Where( Contains( myList, :age ) );
disturbation_table = dt << Summary( Group( :NAME, :ENTITY ), Quantiles( 1, :VALUE ), Quantiles( 99, :VALUE ), Link to original data table( 0 ));
n_rows = NRow(disturbation_table);
//iterate all the disturbation data
For(i = 1, i <= n_rows, i++,
name_value = Column(disturbation_table, "NAME")[i];
entity_value = Column(disturbation_table, "ENTITY")[i];
QuantilesUp = Column(disturbation_table, "Quantiles99(VALUE)")[i];
QuantilesDown = Column(disturbation_table, "Quantiles1(VALUE)")[i];
try(
outliers_rows_to_delete = dt << Select Where(dt:NAME == name_value & dt:ENTITY == entity_value & (dt:VALUE >= QuantilesUp | dt:VALUE <= QuantilesDown), current selection("extend"));
);
);
dt << Delete Rows(outliers_rows_to_delete); 命令:
colQuantile(:Value, 0.99, :Name, :Entity)
使用:Name和:Entity作为'by'变量,因此应该为您提供所需的东西。在“帮助>脚本编制索引”中查找此命令。也许我还不了解。