N개의 Null 행 값이 있는 열 삭제각 열이 도구이고 각 행이 시간인 값 테이블이 있습니다. 일부 장비에는 의미 있는 모델에 적합하기에 충분한 시간 값에 데이터가 기록되지 않았습니다.
루프를 사용하여 각 열을 차례로 순환하고 값의 수를 확인하려고 합니다.
열 80의 값 수를 찾는 코드가 있습니다.
col_a = Column(dt_2, 80);
val_mat = col_a << Get Values;
y = sum(!is missing(val_mat));
이 코드를 각 열에 대한 루프에 차례로 적용하고 값이 너무 적은 열을 삭제하려고 합니다.
N_loop = N Cols(dt_2);
i_loop = 2;
While (i_loop <= N_loop,
col_loop = Column(dt_2, i_loop),
val_loop = col_loop << Get Values,
y_loop = sum(!is missing(val_loop)),
If(y_loop <= 8,
dt_2 << Delete Columns( i_temp ),
);
i_temp+=1,
);
오류 메시지에 너무 많은 인수가 표시됩니다.
창Re: N개의 Null 행 값이 있는 열 삭제이를 수행하는 여러 가지 방법. 한 가지 옵션은 Col Number 또는 Col N Missing 및 For Each를 사용하는 것입니다(JMP16 필요).
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
//delete some values
dt[1::20, "name"] = "";
dt[1::30, "sex"] = "";
dt[1::40, "height"] = .;
wait(2);
row_count = N Rows(dt);
For Each({col_name}, dt << Get Column Names("String"),
// missing_vals = Col N Missing(Column(dt, col_name));
// found_values = row_count - missing_vals;
found_values = Col Number(Column(dt, col_name));
If(found_values <= 8,
dt << Delete Column(col_name);
)
);Re: N개의 Null 행 값이 있는 열 삭제인수가 너무 많은 이유는 While() 함수에 두 번째 쉼표가 있기 때문입니다.
While() 함수의 구조는 다음과 같습니다.
While( testExpr, bodyExpr )
참고: 함수에 대한 인수는 2개뿐입니다.시험
i_loop <= N_loop
그런 다음 textExpr이 true인 경우 실행되는 명령문입니다.bodyExpr에는 각 문 뒤에 세미콜론이 아닌 쉼표가 있습니다.따라서 각 진술을 별도의 인수로 만듭니다.
쉼표를 세미콜론으로 변경하고 이 코드를 실행하지 마십시오.코드를 끝내지 못하게 하는 논리 오류가 있습니다.i_loop 및 N_loop은 값이 변경되지 않습니다.
열에서 유효한 값의 수를 확인하는 더 빠른 방법도 있습니다.또한 열을 삭제하고 N_loop 값이 고정된 상태로 유지되는 경우 한 열이 삭제되면 N_loop는 더 이상 데이터 테이블의 올바른 열 수가 아닙니다.이러한 경우 마지막 열에서 첫 번째 열로 작업하는 것이 가장 좋습니다.
아래는 유효한 데이터 값의 수가 8보다 작거나 같은 열을 삭제하는 스크립트의 재작업입니다.
Names Default To Here( 1 );
dt_2 = Current Data Table();
N_loop = N Cols( dt_2 );
i_loop = 2;
While( N_loop > i_loop,
If( Col Number( As Column( dt_2, N_loop ) ) <= 8,
dt_2 << Delete Columns( N_loop )
);
N_loop -= 1;
);
추신 @jthi 솔루션이 더 나은 솔루션입니다.귀하의 접근 방식은 약간의 수정과 함께 작동합니다....너무 잘했습니다!