특정 열에 누락된 값이 포함된 전체 행을 필터링하는 JSL 스크립트친애하는 커뮤니티 여러분,
저는 초보 사용자이고 다음 코드에 대한 친절한 도움을 요청하고 싶습니다. "is missing" 함수의 인수가 잘못된 것 같습니다.
스크립트에서 특정 범위의 값이 포함된 행이 표시되는 표를 표시하고 싶습니다. 또한 필터링에 사용된 두 열의 빈 셀이 있는 행은 제외합니다.
코드는 다음과 같습니다.
dt = Current Data Table(); // Assumes you have a data table already opened
// Convert Column1 to numeric data type
dt << As Numeric("Temperatur");
// Convert Column2 to numeric data type
dt << As Numeric("Menge");
// Create the conditions to filter the rows
condition1 = Column(dt, "Temperatur") << Get Values() > 25;
condition2 = Column(dt, "Menge") << Get Values() > 0;
// Create a condition to remove empty cells
condition3 = Any(Is Missing(dt << Get Values("Temperatur"))) == 0 | Any(Is Missing(dt << Get Values("Menge"))) == 0;
// Apply all three conditions to filter the data table
filtered_dt = dt << Select Where(condition1 & condition2 & condition3);
// Show the filtered data table
filtered_dt << Show();
모든 탐색에 대해 미리 감사드립니다. 저는 JMP 버전 17을 사용하고 있습니다.
남자 이름
자동화 및 스크립팅Re: 특정 열에 누락된 값이 포함된 전체 행을 필터링하는 JSL 스크립트지티, 정말 고맙습니다. 당신의 도움으로 실행할 수 있었습니다!
Re: 특정 열에 누락된 값이 포함된 전체 행을 필터링하는 JSL 스크립트호기 씨, 정말 고맙습니다. 당신의 도움으로 달릴 수 있었습니다!
Re: 특정 열에 누락된 값이 포함된 전체 행을 필터링하는 JSL 스크립트데이터 테이블에서 행렬 비교와 선택을 혼합하고 있는 경우, 이 경우 << Select Where 또는 << Get Rows Where 중 하나만 사용하고 << Get Values는 사용하지 않는 것이 좋습니다( << Select Where 대신 << Get Rows Where를 사용할 수도 있지만, 이는 사용자가 무엇을 하려는지에 따라 달라집니다).
조건을 단일 Select Where 문으로 직접 결합할 수 있습니다(조건을 분리하려는 경우 정확히 동일한 문을 재사용하려는 경우가 아니면 주석을 사용하여 분리합니다)
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
dt[[1 2 3 20 30], "height"] = .;
dt[[10 15 16 30], "weight"] = .;
// Comparison
dt << Select Where((:height > 60) & (:weight > 90));
selrows = dt << get selected rows; // to get a matrix of selected row numbers
r = dt << Get Rows Where((:height > 60) & (:weight > 90));
이 경우에는 누락된 값을 확인하는 것이 불필요합니다.
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
dt[[1 2 3 20 30], "height"] = .;
dt[[10 15 16 30], "weight"] = .;
// Comparison
r1 = dt << Get Rows Where((:height > 60) & (:weight > 90) & (!IsMissing(:height) | !Is Missing(:weight)));
r2 = dt << Get Rows Where((:height > 60) & (:weight > 90));
r1 == r2;Re: 특정 열에 누락된 값이 포함된 전체 행을 필터링하는 JSL 스크립트안녕 마이클.
JMP의 멋진 점은 스크립팅에 대한 지식이 없어도 GUI와 마우스만 사용하면 된다는 것입니다.
그런 다음 단계를 실행한 후 고급 로그로 가서 코드를 확인할 수 있습니다...
- 행/ 행 선택/ 선택 위치 (Ctrl + W)

- 선택한 행에 대한 데이터 보기 열기:

- 로그 확인:

Jmp는 사용자가 원하는 것을 이해하고 두 단계를 단 한 줄의 코드로 결합합니다.

명령을 직접 구성하려면 문자열을 정의하고 연결한 다음 최종 코드를 구문 분석하고 평가할 수 있습니다.
cond1 = "Is Missing( :age )";
cond2 = ":age > 16";
Eval(Parse("dt << Select where( "|| cond1 || " | " || cond2 || " ) << Data View;"))
제 제안: Expression Handling을 배우고 이해하는 데 시간을 투자하세요
훌륭한 튜토리얼: JSL을 사용하여 효율적이고 견고한 애플리케이션 개발(EU 2018 415) - @joseph_morgan
실제로 이는 귀하의 접근 방식과 매우 유사합니다.
일부 조건을 JSL "기호" 조건 1, 조건 2 ...로 저장한 다음 이를 사용하여 최종 표현식을 구성하고 평가합니다.
일부 코드를 수정하고 여기저기에 Expr() 과 Name Expr()을 추가하면(Jmp가 조건을 최종 코드 줄에 넣기 전에 평가하는 것을 방지하기 위해) 코드는 다음과 같아야 합니다.
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
condition 1 = Expr(Is Missing( :age ));
condition 2 = Expr(:age > 16 );
combined condition=Expr(or());
Insert into(combined condition, Name Expr(condition1));
Insert into(combined condition, Name Expr(condition2));
Eval(Substitute(dt << Select where( _cond_ ) << Data View),
Expr(_cond_),Name Expr(combined condition)));