다른 테이블 값을 기반으로 다중 행 선택안녕하세요, 다른 테이블 행을 기반으로 하나의 테이블에서 valuse를 선택하려고합니다.
현재 사용하는 코드는 루프를 사용하지만 큰 테이블에서는 속도가 느려지고 더 효율적으로 만들 수있는 방법을 찾고 싶습니다.
내 목표는 내 데이터에서 모든 이상 값을 제거하여 우선 퀀텀을 계산 한 다음 메인 테이블에서 반복하여 일치하는 행을 찾습니다. 마지막에이 행을 삭제합니다.
루프를 사용하지 않고 조건부 "선택 위치"논리를 사용하는 방법이 있습니까? 어쩌면 논리와 비슷할 수도 있습니다. 감사!
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); 제목 : Re : 다른 테이블 값을 기반으로 다중 행 선택이 방법이 더 빠를 것이라고 기대합니다.
NamesDefaultToHere(1);
// Make a table to mess with
n = 1000;
numName = 20;
numEntity = 10;
mat = J(n, 1, RandomInteger(numName)) || J(n, 1, RandomInteger(numEntity)) || J(n, 1, RandomNormal());
dt = asTable(mat, << columnNames({"Name", "Entity", "Value"}));
dt << setName("Data");
// Find the quantiles for the 'by' groups
upperCol = dt << NewColumn("99% Quantile", Numeric, Continuous, Formula(colQuantile(:Value, 0.99, :Name, :Entity)));
lowerCol = dt << NewColumn("1% Quantile", Numeric, Continuous, Formula(colQuantile(:Value, 0.01, :Name, :Entity)));
dt << runFormulas;
upperCol << deleteFormula;
lowerCol << deleteFormula;
// Select outliers rows
Wait(3);
outlierRows = dt << getRowsWhere(:Value >= :Name("99% Quantile") | :Value <= :Name("1% Quantile") );
dt << selectRows(outlierRows);
// Remove them?
// Column(dt, "Value")[outlierRows] = .;
물론 '아웃 리어 (outllier)'에 대한 정의가 두 가지 이상 있으며, 이들을 처리하는 방법은 여러 가지가 있습니다. . .
제목 : Re : 다른 테이블 값을 기반으로 다중 행 선택그것만이 첫 번째 열 검역을 계산합니다.
나는 이름과 실체별로 데이터 그룹을 얻고 싶다.제목 : Re : 다른 테이블 값을 기반으로 다중 행 선택명령 :
colQuantile(:Value, 0.99, :Name, :Entity)
uses : Name과 : Entity를 'by'변수로 사용하므로 원하는 것을 얻을 수 있습니다. '도움말> 스크립팅 색인'에서이 명령을 찾으십시오. 또는 아마 나는 이해하지 못했다.