합격/불합격 공식은 어떻게 작동하나요?수식이 null 값을 반환하는 문제가 발생했습니다.
원시 테이블은 원시 데이터이고, 사양 테이블이 있는데, 이 사양 테이블은 원시 데이터가 사양 테이블에 따라 통과하는지 실패하는지 판별하는 데 사용됩니다. JSL을 작성했는데, 문제가 무엇인지 알려주시면 감사하겠습니다.
Names Default To Here( 1 );
//raw data
dt = Data Table( "raw data001" );
dt1 = dt << subset( all rows, all columns );
//spec table
dtbz = Data Table( "Spec" );
LSL = dtbz[0, 3];
USL = dtbz[0, 4];
dtbz << New Column( "combine", formula( :Project || :Item ) );
// Create separate judgment columns for the columns to be judged
items = Design( dtbz:Item << get values(), <
<LEVELS>
0, dtbz:LSL[Loc( dtbz:combine << get as matrix(), "A" || it )[1]] <= Column( dt1, items[i] ) <= dtbz:USL[ Loc( dtbz:combine << get as matrix(), "A" || it )[1]], :Project == "B" & N Items( Loc( dtbz:combine << get as matrix(), "B" || it ) ) > 0, dtbz:LSL[Loc( dtbz:combine << get as matrix(), "B" || it )[1]] <= Column( dt1, items[i] ) <= dtbz:USL[ Loc( dtbz:combine << get as matrix(), "B" || it )[1]], :Project == "C" & N Items( Loc( dtbz:combine << get as matrix(), "C" || it ) ) > 0, dtbz:LSL[Loc( dtbz:combine << get as matrix(), "C" || it )[1]] <= Column( dt1, items[i] ) <= dtbz:USL[ Loc( dtbz:combine << get as matrix(), "C" || it )[1]], :Project == "D" & N Items( Loc( dtbz:combine << get as matrix(), "D" || it ) ) > 0, dtbz:LSL[Loc( dtbz:combine << get as matrix(), "D" || it )[1]] <= Column( dt1, items[i] ) <= dtbz:USL[ Loc( dtbz:combine << get as matrix(), "D" || it )[1]], ) ) ) );
</LEVELS>
자동화 및 스크립팅Re: 합격/불합격 공식은 어떻게 되나요?다음은 스크립트를 단순화하고 여전히 수익을 제공하는 스크립트 재작업입니다.

Names Default To Here( 1 );
//raw data
dt = Data Table( "raw data001" );
dt1 = dt << subset( all rows, all columns );
//spec table
dtbz = Data Table( "Spec" );
LSL = dtbz[0, 4];
USL = dtbz[0, 5];
//dtbz << New Column( "combine", formula( :Project || :Item ) );
dtbz << New Column( "combine", character, formula( :Project || :Item ) );
// Create separate judgment columns for the columns to be judged
// items = Design( dtbz:Item << get values(), <<LEVELS> 0,
dtbz:USL[Loc( dtbz:combine << get as matrix(), "A" || it )[1]] <= Column( dt1, items[i] )
<= dtbz:USL[Loc( dtbz:combine << get as matrix(), "A" || it )[1]],
:Project == "B" & N Items( Loc( dtbz:combine << get as matrix(), "B" || it ) ) > 0,
dtbz:USL[Loc( dtbz:combine << get as matrix(), "B" || it )[1]] <= Column( dt1, items[i] )
<= dtbz:USL[Loc( dtbz:combine << get as matrix(), "B" || it )[1]],
:Project == "C" & N Items( Loc( dtbz:combine << get as matrix(), "C" || it ) ) > 0,
dtbz:USL[Loc( dtbz:combine << get as matrix(), "C" || it )[1]] <= Column( dt1, items[i] )
<= dtbz:USL[Loc( dtbz:combine << get as matrix(), "C" || it )[1]],
:Project == "D" & N Items( Loc( dtbz:combine << get as matrix(), "D" || it ) ) > 0,
dtbz:USL[Loc( dtbz:combine << get as matrix(), "D" || it )[1]] <= Column( dt1, items[i] )
<= dtbz:USL[Loc( dtbz:combine << get as matrix(), "D" || it )[1]],
)
)
);*/
Eval(
Substitute(
Expr(
dt1 << New Column( it || "—yield",
formula(
curProject = :Project;
Try( dtbzRow = (dtbz << get rows where( dtbz:Project == curProject & dtbz:item == __it__ ))[1], 0 );
If( dtbzRow > 0,
If( dtbz:LSL[dtbzRow] <= As Column( dt1, __it__ ) <= dtbz:USL[dtbzRow],
1,
0
)
);
)
)
),
Expr( __it__ ), it
)
);
);</LEVELS>
Re: 합격/불합격 공식은 어떻게 되나요?빠른 답변을 주셔서 대단히 감사합니다. 작동합니다.
Re: 합격/불합격 공식은 어떻게 되나요?안녕 짐 , 또 다른 작은 문제는 해당 USL 및 LSL이 사양 테이블에서 발견되지 않으면 null 값이 반환되어야 하지만 이 코드가 실행되어 0을 반환한다는 것입니다. 무슨 일이 일어나고 있는지 모르겠습니다.
Re: 합격/불합격 공식은 어떻게 되나요?내가 제공한 원래 수정은 모든 사양 제한을 사용할 수 있다고 가정했습니다.제한이 누락될 가능성을 허용하려면 이러한 경우를 처리하도록 수식을 변경해야 합니다.아래의 JSL은 몇 가지 가능한 경우에 맞게 조정되지만 다음과 같은 다른 경우를 추가해야 할 수도 있습니다.
USL이 LSL보다 작습니다.
Names Default To Here( 1 );
//raw data
dt = Data Table( "raw data001" );
dt1 = dt << subset( all rows, all columns );
//spec table
dtbz = Data Table( "Spec" );
// Create separate judgment columns for the columns to be judged
// items = Design( dtbz:Item << get values(), <<LEVELS> 0 & Is Missing( dtbz:LSL[dtbzRow] ) == 0 & Is Missing( dtbz:USL[dtbzRow] ) == 0,
If( dtbz:LSL[dtbzRow] <= As Column( dt1, __it__ ) <= dtbz:USL[dtbzRow],
1,
0
),
.
);
)
)
),
Expr( __it__ ), it
)
);
);</LEVELS>Re: 합격/불합격 공식은 어떻게 되나요?감사합니다. 하지만 질문이 있습니다. 이전 코드에 왜 이런 문제가 있었나요? 이전 코드의 논리는 다음과 같습니다. SPEC 테이블에서 발견되면 판단이 없고 코드가 없으면 빈 값이어야 합니다. 아, 왜 여전히 판단하고 있습니까?
Re: 합격/불합격 공식은 어떻게 되나요?계산된 값은 행마다 유지되므로 행 2의 조건이 계산된 값을 변경하지 않으면 행 1에 대해 계산된 값은 변경되지 않은 상태로 유지됩니다.
Re: 합격/불합격 공식은 어떻게 되나요?감사해요! 나는 그것을 시도했고 실제로 이전 코드 실행에서 SPEC 테이블에서 찾을 수 없으면 이전 행의 dtbzRow로 이동합니다. 분명히 찾을 수 없지만 여전히 이전 행의 값을 누릅니다. 루틴 수식에서는 찾을 수 없습니다. 다른 테이블 조회를 사용할 때만 발생합니까?
Re: 합격/불합격 공식은 어떻게 되나요?JMP의 메모리 변수는 변경될 때까지 영구적으로 유지됩니다.다음은 1행에 변수 "a"를 설정한 다음 10행에서 변경하는 수식과 새 열을 생성하는 스크립트입니다. "a" 값이 10행까지 변경되지 않고 그때까지 초기 설정 값.
Names Default To Here( 1 );
dt =
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Big Class.jmp" );
// New column: Column 6
Data Table( "Big Class" ) << New Column( "test",
Numeric,
"Continuous",
Format( "Best", 12 )
);
dt:test << set formula(
If( Row() == 1, a = 1 );
If( Row() == 10, a = a + 1 );
:test = a;
);
Re: 합격/불합격 공식은 어떻게 되나요?알겠습니다. try 문에서 찾을 수 없으면 할당되지 않아 원래 값이 나오지만 처음에 첫 번째 줄에서 찾을 수 없기 때문에 어떻게 됩니까? 그것은 할당?
Re: 합격/불합격 공식은 어떻게 되나요?나는 그것을 더 쉽게 읽을 수 있도록 스크립트에 주석을 달았습니다.또한 Try() 함수를 약간 변경하여 dtbzRow에 결과를 제공하도록 이동했습니다.
이해에 도움이 되는지 확인
Names Default To Here( 1 );
//raw data
dt = Data Table( "raw data001" );
dt1 = dt << subset( all rows, all columns );
//spec table
dtbz = Data Table( "Spec" );
// Create separate judgment columns for the columns to be judged
// items = Design( dtbz:Item << get values(), <<LEVELS> 0 & Is Missing( dtbz:LSL[dtbzRow] ) == 0 &
Is Missing( dtbz:USL[dtbzRow] ) == 0,
// If the column's value is between the LSL and USL
// the value is set to 1, if outside one of the
// limits it is set to 0
If(
dtbz:LSL[dtbzRow] <= As Column( dt1, __it__ ) <= dtbz
:USL[dtbzRow],
1,
0
),
.
);
)
)
),
Expr( __it__ ), it
)
);
);</LEVELS>Re: 합격/불합격 공식은 어떻게 되나요?양해해 주셔서 감사합니다.