JSL을 사용하여 하나 이상의 빈 값이 있는 행 제거<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />각 행에는 세 가지 온도의 단일 측정 유형이 포함되어 있고 각각 자체 열에 저장되어 있는 테이블이 있습니다. 궁극적으로 이러한 측정값 간의 델타를 계산한 다음 해당 데이터를 새 테이블에 쌓고 싶습니다. 그러나 세 가지 온도 모두에서 모든 측정이 수행되는 것은 아니므로 하나 이상의 데이터 열이 비어 있는 측정(행)을 제외해야 합니다. JMP 9.0 스크립트를 사용하여 이 작업을 수행해야 합니다.
주어진:
dtSplit =
| 측정 | T1 | T2 | T3 |
|---|
| 측정 A | 5 | 12 | 89 |
| 측정 B | 13 | | 8 |
| 측정 C | | 52 | 57 |
| 측정 D | 22 | 21 | |
| 측정 E | 8 | | |
| 측정 F | | | 15 |
| 측정 G | | 54 | |
나는 다음을 생산해야 합니다:
dtClean =
나는 다음과 같은 것을 사용하려고했습니다.
dtSplit << Select Where(
Is Empty(:T1) ||
Is Empty(:T2) ||
is Empty(:T3)
) << Delete Rows;
그러나 Select Where(Is 비어 있음(:COL))은 항상 모든 행을 선택합니다.
나는 간단한 것을 놓치고 있다고 확신합니다. 귀하의 도움에 크게 감사드립니다.
- 매트
Re: JSL을 사용하여 하나 이상의 빈 값이 있는 행을 제거합니다.안녕
의견을 보내주셔서 감사합니다. 추천하신 누락 데이터 패턴을 확인했는데 작동하지만 완전히 작동하지는 않습니다.
내 데이터 테이블에는 각 이름에 4개의 서로 다른 행이 있습니다. 이름의 4개 행은 각각 1회 테스트(sens, 마스크, EVM 및 전력)의 결과입니다.
내 데이터 테이블 예에서 장치 A는 첫 번째 테스트 "Sens"에 실패하고 2차, 3차, 4차 테스트를 통과했습니다. A 디바이스는 'Sens'에 불합격하므로 2차, 3차, 4차 테스트를 통과하더라도 불합격 디바이스이다.
Tables==>Missing Data Pattern을 사용하면 A의 두 번째, 세 번째, 네 번째 행이 삭제됩니다. 내가 찾고 있는 것이 아닙니다. 데이터가 없을 때(10MHz, 20MHz, 30MHz 및 1000MHz에 데이터 없음) 각 이름의 4개 행을 삭제하고 싶습니다. 내 데이터 테이블에서 이름 C, G, H, I, JK 및 N이 삭제됩니다.
도움을 주셔서 감사합니다
Re: JSL을 사용하여 하나 이상의 빈 값이 있는 행을 제거합니다.Missing Data Pattern 플랫폼을 살펴봐야 합니다. 형태.이를 통해 누락된 값이 모두 있는 모든 행을 식별한 다음 행 삭제 등을 선택할 수 있습니다.
테이블==>데이터 패턴 누락
Re: JSL을 사용하여 하나 이상의 빈 값이 있는 행을 제거합니다.안녕
처음 올리는 글이라 첨부된 엑셀 파일이 제대로 전달되는지 잘 모르겠습니다. 그렇지 않다면,
샘플 데이터 파일의 PNG도 첨부하겠습니다.
저는 JMP를 처음 접했고(JMP 14를 사용하고 있습니다) 행 삭제 스크립트에 대한 도움이 필요합니다.
내 데이터 테이블에는 각 장치가 테스트되는 다양한 장치의 데이터가 포함되어 있습니다.
넓은 주파수 범위에 걸쳐 4가지 다른 오류(감도, 마스크, EVM 및 전력)
10MHz ~ 1000MHz. 통과 장치는 4개 모두에 대해 빈 셀 ""이 있는 장치입니다.
주파수 범위에 걸쳐 테스트를 수행했는데 데이터 테이블에서 해당 항목을 제거하고 싶습니다.
(첨부된 Excel 파일의 녹색 행 삭제 - 장치 C, G, H, I, J, K, N)
첫 번째 문제: 빈 행을 삭제하는 방법(10MHz ~ 1000MHz 열 = 비어 있음)
내가 찾은 아래 명령은 비슷하지만 100개의 다른 열과 "and"가 있기 때문에 유용하지 않습니다.
그것들은 모두 꽤 길며 나중에 빈도를 높이기로 결정하면 확장 가능하지 않습니다.
1000MHz 이상
dtsplit << 선택 위치(없음(:T1) | 없음(:T2) | 없음(:T3)) << 행 삭제;
나는 또한 다음 명령을 시도했습니다.
( i = 2, i <= 101, i++,
dtSplit << 선택 위치( Is Missing( Column( i )[] ) ) << 행 삭제
);
이 명령을 실행하면 오류가 발생합니다.
다음 스크립트에서는 /*###*/로 표시된 오류가 있습니다.
dt = 현재 데이터 테이블();
( i = 2, i <= 100, i++,
dtSplit/*###*/ << where( Is Missing( Column( i )[] ) ) 선택 << 행 삭제
);
두 번째 문제: 각 장치가 4번 테스트되므로 삭제된 행은 4의 배수여야 합니다.
어떻게 해야 할지 잘 모르겠습니다
이것에 대한 당신의 도움에 정말 감사하겠습니다
감사해요
new_2_JMP
Re: JSL을 사용하여 하나 이상의 빈 값이 있는 행을 제거합니다.단일 셀만 검사하는 경우:
if ( Is Missing( Column( dt,"Value" )[7] ),
dt << delete rows([7]);
);
Re: JSL을 사용하여 하나 이상의 빈 값이 있는 행을 제거합니다.코드에서는 행 7만 확인하고 있습니다. 각 행을 테스트해야 합니다.
dt << select where( Is Missing( Column( dt,"weight" )[row()] ) ) << delete rows;
Re: JSL을 사용하여 하나 이상의 빈 값이 있는 행을 제거합니다.안녕,
나는 약간 똑같이하려고 노력하고 있습니다.
셀이 비어 있는지 확인한 다음 비어 있으면 행을 삭제해야 합니다.
나는 다음을 시도했습니다 -
dt << select where( Is Missing( Column( dt,"Value" )[7] ) ) << 행 삭제;
그러나 테이블의 모든 행이 삭제됩니다.
아이디어를 찾고 있습니다.
Re: JSL을 사용하여 하나 이상의 빈 값이 있는 행을 제거합니다.훌륭한 토론. 센서 파일에서 가져올 때 파일 끝에 빈 행이 많이 있는 비슷한 문제가 있었습니다. 센서 데이터가 없는 행을 제거하고 싶었습니다. 그러나 여전히 일부 정보가 있는 행을 제거하고 싶지 않았습니다.아래는 JMP14로 작성되었지만 이전 버전에서도 작동할 것으로 생각됩니다. JMP14에는 행 선택 > 중복 행 선택이 있다는 것을 알고 있습니다. 그러나 한 행의 모든 숫자 열을 합산하는 유사한 함수를 찾을 수 없습니다. 아래 스크립트에서 Sum()은 행렬의 행 전체에서 null을 반환하지만 저는 0을 원했습니다. V Sum()의 출력이 모든 null에 대해 0을 반환한다는 것을 발견했습니다. 제대로 작동하려면 행 벡터를 열 벡터로 바꿔야 했습니다.이는 숫자 열이 모두 비어 있는 한 숫자 열 수에 관계없이 작동합니다. 누군가가 더 나은 솔루션을 가지고 있다면 여전히 관심이 있습니다.
dt = Current Data Table();
// Get all numeric data
m = dt << Get As Matrix;
// for each row, test if the V Sum is 0 or non-zero
// V Sum returns 0 for all null
// Sum() returns null for all null
rowlist = {};
For(i= N Rows(m), i>=1,i--,
If(V Sum(Transpose(m[i,0]))[1] == 0,
Insert Into(rowlist,i)
)
);
dt << Delete Rows(rowlist);Re: JSL을 사용하여 하나 이상의 빈 값이 있는 행을 제거합니다.연결 연산자를 사용하는 것은 전사 오류였습니다. 오래된 습관은 쉽게 사라지지 않습니다.
문제는 실제로 '88', '95' 및 '105'인 내 열 이름이었고 Is Missing(:88)을 사용하여 모든 행을 선택한 것으로 나타났습니다.
dtsplit << Select Where(Is missing(:Name("T1")) | Is missing(:Name("T2")) | is missing(:Name("T3"))) << Delete Rows;
훌륭하게 작동합니다.
Re: JSL을 사용하여 하나 이상의 빈 값이 있는 행을 제거합니다.문자열 연결 연산자 ||를 사용하고 있었습니다. OR 연산자 대신 |.MS에서 보여준 것처럼 Is Missing 기능을 사용해야 하고 Is 비어 있지는 않아야 합니다.귀하의 코드는 다음과 같습니다:
dtsplit << Select Where(Is missing(:T1) | Is missing(:T2) | is missing(:T3)) << Delete Rows;
Re: JSL을 사용하여 하나 이상의 빈 값이 있는 행을 제거합니다.죄송합니다. JMP9 요구 사항을 놓쳤습니다. Loc Nonmissing() 함수는 JMP 10에 새로 추가된 것으로 보이므로 위의 내용은 JMP 9에서는 작동하지 않습니다.
다음은 JMP 9에서 작동하는 코드와 유사하지만 루프를 사용하는 대체 접근 방식입니다.
For( i = 2, i <= 4, i++,
dtSplit << select where( Is Missing( Column( i )[] ) ) << delete rows
);
Re: JSL을 사용하여 하나 이상의 빈 값이 있는 행을 제거합니다.이는 다양한 방법으로 수행될 수 있습니다. 숫자 열의 경우 행렬 함수가 효과적인 경우가 많습니다.
다음은 열 2, 3, 4에서 누락된 셀이 있는 모든 행을 삭제하는 예입니다.
keeprows = Loc Nonmissing( dtSplit << get as matrix( {2, 3, 4} ) );
dtSplit << select rows( keeprows ) << invert Row Selection << delete rows;
다음은 누락된 셀이 없는 열의 하위 집합을 만드는 대체 방법입니다(원본 테이블을 변경하지 않고 유지).
dtClean = dtSplit << Clear Column Selection() << subset( rows( Loc Nonmissing( dt << get as matrix( {2, 3, 4} ) ) ) );Re: JSL을 사용하여 하나 이상의 빈 값이 있는 행 제거이 스크립트는 "이름"이라는 열 뒤에서 작업을 시작하여 테이블의 끝까지 계속되면서 빈 행을 삭제합니다.
// Get the current data table
dt = Current Data Table();
// Get all column names as strings
cnmes = dt << Get Column Names("string");
// Initialize Start and End indices
Start = .;
End = N Items(cnmes);
// Find the index of the "Device 2" column
For(k = 1, k <= N Items(cnmes), k++,
If(Contains(cnmes[k], "Names"),
Start = k + 1;
Break(); // Exit loop once found
);
);
// Loop through the columns from Start to End and delete rows with missing values
For(i = Start, i <= End, i++,
dt << Select Where(Is Missing(Column(i)[])) << Delete Rows;
);