루프 통계가 루프에서 작동하는 데 문제가 있습니까?루프를 사용하여 각 열 이름을보고이를 99 번째 백분위 수를 계산하는 다음 코드 줄이있는 함수로 전달하여 테이블의 여러 열에서 이상 치를 제거하는 스크립트를 작성하려고합니다.
test_upper_quantile = Col Quantile (Column (Test_Number), 0.99);
그런 다음 For Each Row 루프를 사용하여 계산 된 백분위 수와 값을 비교하고이 값을 벗어나는 행을 제거합니다.
코드가 제대로 작동하지만 한 열만 수행하면 여러 열로 열 이름을 Test_Number 변수로 읽는다면 jmp는 항상 첫 번째 열에 대해 계산 된 첫 번째 열의 값을 사용하므로 각 열에 대해 다시 계산하지 않습니다 . 루프는 변수 Test_Number를 로그에 표시하고 예상대로 열과 일치하도록 변경되므로 올바르게 설정됩니다. 그래서 10 열을하면 10 개의 올바른 열 이름이 표시되지만 첫 열의 quantile 만 10 회 반복됩니다 !!!
또한 아래 코드 줄을 강조 표시하면 스크립트가 끝나면 올바르게 만난 마지막 열의 값이 계산됩니다.
test_upper_quantile = Col Quantile (Column (Test_Number), 0.99);
함수의 시작 부분에서 quantile 값을 보유하고있는 전역 test_upper_quantile을 지우려고했으나 아무런 차이가 없다.
어떤 아이디어? 나는 당신이 열 quantile comand 위에 커서를 올려 놓았을 때주의를 기울였다. 캐시를 지울 수있는 방법이 있다면 내 문제입니까?
전체 기능이 표시됩니다.
remove_outliers = 함수 ({Test_Number},
쇼 (test_number);
test_lower_quantile = Col Quantile (열 (Test_Number), 0.01);
test_upper_quantile = Col Quantile (Column (Test_Number), 0.99);
쇼 (test_upper_quantile);
lower_cutoff = test_lower_quantile;
upper_cutoff = test_upper_quantile;
각 행 (
(Column (test_number) [] 제외됨 (행 상태 ()) = 1
);
(Column (test_number) []> upper_cutoff,
제외됨 (행 상태 ()) = 1
);
);
);
메시지 편집자 : apedenRe : 열 통계가 루프에서 작동하는 데 문제가 있습니까?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><< Col List Box >> (<<)에서 얻은 것을 컬럼 참조로 변환하려면 As Column () 함수를 사용하십시오.
기본 이름은 여기에있다. ( 1 ) ;
dt = 열다 ( "$ SAMPLE_DATA / solubility.jmp" ) ;
북아 일 = 새창 ( "quantile에 대한 열 선택" ,
파운드 = 콜 목록 상자 ( 모든 ) ,
단추 상자 ( "승인" ,
칼 = 파운드 << 선택 받기 ;
북아 일 << 창 닫기 ;
)
) ;
에 대한 ( 나는 = 1 , 나는 <= N 개 항목 ( 칼 ) , 나는 ++,
보여 주다 ( 콜 퀼리티 ( 열로 ( 칼 [ 나는 ] ) , .5 ) )
) ;
- 제프
Re : 열 통계가 루프에서 작동하는 데 문제가 있습니까?안녕하세요 제프,
귀하의 코드는 나를 위해 작동합니다. 그것은 내 코드와 매우 유사합니다. 유일한 차이점은 열 이름 목록이 생성되는 방법입니다. 대화 상자 창에서 다음을 사용합니다.
| | | | ButtonBox ( "확인", |
| | | | | yParamNames = colListY << 항목 가져 오기; |
각 열 이름은 따옴표로 묶인 문자열 목록을 반환합니다. colListY는 사용자가 채울 열 목록 상자입니다.
나는 너무 - 그 해결 방법을 발견했습니다. JMP가 작업을 수행하는 대신 열의 모든 것을 가져옵니다. 내가 보게되는 해결 방법의 단점은 수동으로 프로그램하지 않는 한 숨겨진 데이터와 제외 된 데이터를 무시하지 않는다는 것입니다.
임시 목록 1 = {} ; 임시 목록 1 = 기둥 ( dtData , yParamList [ 나는 ]) << 행렬로 얻다. ; MedVal [ 나는 ] = 분계선 ( 0.5 , 임시 목록 1 ) ; q1Val [ 나는 ] = 분계선 ( 0.25 , 임시 목록 1 ) ; q3Val [ 나는 ] = 분계선 ( 0.75 , 임시 목록 1 ) ; // medVal = col quantile (column (dtData, yParamList ), 0.5); // q1Val = col quantile (column (dtData, yParamList ), 0.25); // q3Val = col quantile (column (dtData, yParamList ), 0.75); | |
Re : 열 통계가 루프에서 작동하는 데 문제가 있습니까?아마도 당신은 어려움을 유발하는 코드를 게시 할 수 있습니다.
이 작품은 나를 위해 :
dt = 열다 ( "$ SAMPLE_DATA / Solubility.jmp" ) ;
노스 캐롤라이나 = dt << 열 이름을 얻는다. ( 숫자 ) ;
...에 대한 ( 나는 = 1 , 나는 <= 니 넴스 ( 노스 캐롤라이나 ) , 나는 ++,
보여 주다 ( 콜 분열 ( 기둥 ( 노스 캐롤라이나 [ 나는 ]) , .5 )) ;
) ;
/ * :
Col Quantile (칼럼 (nc ), 0.5) = 1.36;
Col Quantile (칼럼 (nc ), 0.5) = 1.21;
Col Quantile (칼럼 (nc ), 0.5) = 0.95;
Col Quantile (칼럼 (nc ), 0.5) = 0.445;
Col Quantile (칼럼 (nc ), 0.5) = -0.015;
Col Quantile (칼럼 (nc ), 0.5) = -0.62;
Re : 열 통계가 루프에서 작동하는 데 문제가 있습니까?나는이 게시물이 세 살이라는 것을 알고 있지만이 문제에 대한 해결책이 있습니까? 나는 똑같은 것을보고있다. 루프에서 col quantile을 사용하면 루프의 첫 번째 반복 만 내 목록에 저장됩니다.
col quantile () 함수를 포함하지 않는 quantile 데이터를 가져 오는 작업이 있습니까? 나는 수천 개의 컬럼에 대한 실행 시간을 증가시킬 것이기 때문에 요약 테이블 (quantile 데이터 요약)을 실제로 수행하고 싶지는 않습니다.
감사