JMP 계산식 편집기에서 계산식에 조건부 표현식(줄여서 조건이라고 함)을 포함할 수 있습니다. 이러한 표현식을 사용하여 절과 결과 표현식으로 구성된 일련의 쌍을 생성할 수 있습니다. 일련의 절을 생성함으로써 계산된 열의 셀에 조건부로 값을 할당할 수 있습니다. 조건은 다음과 같은 규칙을 따릅니다.
• true가 되는 절이 없으면 계산식 편집기는 else 절에서 제공되는 결과 표현식을 실행합니다.
• 조건부 표현식의 모든 결과 표현식은 동일한 데이터 유형이 되어야 합니다.
• 결측 항은 모든 데이터 유형과 매칭됩니다.
• 정의에 따라, 결과가 0이 되는 표현식은 false입니다.
• 표현식 결과가 결측값이 되면 어떤 절도 실행되지 않고 결측값이 반환됩니다. 다른 모든 숫자 표현식은 true입니다.
구문에 대한 자세한 내용은 Scripting Guide의 조건 함수 및 JSL Syntax Reference의 “Conditional and Logical Functions”에서 확인하십시오.
표현식을 확장하려면 계산식 편집기 패널의 삽입 및 삭제 버튼을 사용하십시오. 효율성을 최대화하려면 가장 자주 실행되는 절 및 결과 쌍을 조건 시퀀스의 맨 앞에 나열하십시오.
참고: Interpolate, Step, For 및 While는 주로 다른 명령과 함께 JSL 스크립트를 생성하는 데 사용됩니다. 계산식 편집기를 사용하여 열 내에서 스크립트를 생성하고 실행할 수 있지만 종속성 및 모호성 문제가 발생할 수 있으므로 이 방법은 권장되지 않습니다. 대개 스크립트는 .jsl 파일로 저장되며, 데이터 테이블과 함께 테이블 특성으로 저장될 수 있습니다. 테이블 특성에 대한 자세한 내용은 데이터 테이블의 테이블 패널에서 확인하십시오. 스크립트 명령에 대한 설명은 JSL Syntax Reference에서 확인하십시오.
빈 표현식 하나와 빈 then 절 하나가 포함된 단일 If 조건을 표시합니다. 표현식 또는 then 절을 강조 표시하고 값을 입력하십시오. 예를 들어 Figure A.3에서는 count 및 total 열을 사용하여 총 수가 0이 아닐 때 개수를 총 수 대비 백분율로 계산합니다.
그림 A.3 조건부 표현식
If 조건에 새 조건을 추가하려면 then 절을 강조 표시하고 계산식 편집기 키패드의 삽입 버튼(
)을 클릭하십시오. 이렇게 하면 처음에는 기존 else 조건이 표현식 절로 변경됩니다. 삽입 버튼을 다시 클릭하면 else 절이 추가됩니다. then 또는 else를 강조 표시하고 삽입 버튼을 반복적으로 클릭하면 else가 표현식으로 변경되거나 새 표현식 절이 추가됩니다.
절을 삭제하려면 해당 절 위의 then 절을 선택하고 Delete 키를 누르거나 계산식 편집기 키패드의 삭제 버튼(
)을 클릭합니다.
정의에 따라, 결과가 0이 되는 표현식은 false입니다. 표현식 결과가 결측값이 되면 어떤 절도 실행되지 않고 결측값이 반환됩니다. 다른 모든 숫자 표현식은 true입니다.
표현식을 절 목록과 비교한 후 첫 번째로 매칭되는 절의 결과 표현식 값을 반환합니다. 매칭 표현식을 한 번만 지정한 후 각 절의 매칭 값을 지정해야 합니다.
계산식 편집기에서 Match를 선택하면 다음과 같은 두 개의 옵션이 있는 목록이 나타납니다.
• 데이터에서 Match 인수 추가를 선택하면 데이터의 모든 수준에 해당하는 절이 자동으로 추가됩니다. 또는 Shift 키를 누른 채 조건부를 선택하고 매칭를 선택합니다. Figure A.4의 왼쪽 예에서는 자동으로 추가된 절을 보여 줍니다.
• 각 절을 개별적으로 추가할 수 있도록 추가 안 함을 선택합니다. Figure A.4의 오른쪽 예에서는 사용자가 직접 빈 표현식을 채울 수 있는 빈 절을 보여 줍니다.
그림 A.4 Match 함수의 사용 예
자동으로 채워진 인수에서는 then 절을 강조 표시한 후 표현식을 입력해야 합니다. 빈 인수에서는 표현식, 값 또는 then 절을 강조 표시한 후 표현식을 입력합니다. 또는 표현식을 강조 표시하고 Match를 클릭해도 됩니다. 그러면 계산식 편집기가 원래의 강조 표시된 표현식이 표현식으로 포함된 새 Match 조건을 추가하고 값 및 else 절에는 아무 작업도 수행하지 않습니다. 또한 다음 사항에 유의하십시오.
• Match는 변수가 데이터베이스의 각 행에 대해 한 번씩만 계산되므로 동등한 기능의 If에 비해 실행 속도가 빠르고 메모리 사용량은 적습니다. If 조건은 If 절의 결과가 true가 될 때까지 각 행에 대한 각각의 If 절에서 변수를 계산해야 합니다. Match 조건과 If 조건의 비교는 비교 함수에서 확인하십시오.
• If 및 Match를 사용할 경우 계산식 편집기는 시퀀스의 맨 위부터 아래로 검색하여 첫 번째 true 절을 찾고 해당하는 결과 표현식의 값을 구합니다. 이후의 true 절은 무시됩니다.
다음 예에서는 age 변수의 값에 따라 각각의 값이 할당됩니다.
그림 A.5 Match 함수의 사용 예
참고: Match는 후행 공백을 무시하지만 If는 그렇지 않습니다.
Match는 결측값에 대해 결측값을 반환하지만 명시적으로 결측값을 매칭할 수도 있습니다.
Choose는 조건의 인수가 1부터 시작하는 정수 수열인 특수한 형태의 Match입니다. 절의 값은 매칭 조건을 대체합니다. Figure A.6에서는 Choose 조건의 예를 보여 줍니다. Choose를 사용할 경우 계산식 편집기는 올바른 선택 절로 바로 이동하여 결과 표현식을 계산합니다.
그림 A.6 Choose 조건의 예
표현식을 강조 표시하고 Choose를 클릭하면 계산식 편집기가 한 개의 절을 포함하는 새 조건부 표현식을 생성합니다. 새 절을 추가하거나 필요하지 않은 절을 제거하려면 If 조건에서 이미 설명한 대로 삽입(
) 또는 삭제(
) 버튼을 사용하십시오.
Choose는 Choose 표현식을 계산하고 즉시 해당하는 결과 표현식으로 이동하여 반환 값을 생성합니다. Choose를 사용할 경우에는 1부터 시작하여 순차적 정수를 한 번씩만 생성하는 선택 표현식을 지정한 후 수열의 각 정수를 지정해야 합니다.
각 인수 쌍의 첫 번째 인수를 계산하고 표현식의 최대값과 연결된 결과 표현식(각 쌍의 두 번째 인수)에 대한 계산 결과를 반환합니다. 최대값을 갖는 표현식이 둘 이상이면 첫 번째 최대값이 반환됩니다. 모든 표현식이 결측되고 최종 결과가 지정되지 않은 경우에는 결측값이 반환됩니다. 모든 표현식이 결측되고 최종 결과가 지정된 경우에는 해당 최종 결과가 반환됩니다. 테스트 표현식의 결과는 숫자 값이어야 하지만 결과 표현식은 무엇이든 될 수 있습니다.
각 인수 쌍의 첫 번째 인수를 계산하고 표현식의 최소값과 연결된 결과 표현식(각 쌍의 두 번째 인수)에 대한 계산 결과를 반환합니다. 최소값을 갖는 표현식이 둘 이상이면 첫 번째 최소값이 반환됩니다. 모든 표현식이 결측되고 최종 결과가 지정되지 않은 경우에는 결측값이 반환됩니다. 모든 표현식이 결측되고 최종 결과가 지정된 경우에는 해당 최종 결과가 반환됩니다. 테스트 표현식의 결과는 숫자 값이어야 하지만 결과 표현식은 무엇이든 될 수 있습니다.
두 인수가 모두 true일 때 결과가 1이 됩니다. 그렇지 않으면 결과가 0이 됩니다(Figure A.9). Figure A.7의 계산식은 두 비교가 모두 true인 경우에만 Group 1 운전자 라벨을 적용합니다.
그림 A.7 And 함수 생성
인수 중 하나가 true일 때 결과가 1이 됩니다. 두 인수가 모두 false인 경우 Or 표현식의 결과는 0이 됩니다(Figure A.9). Figure A.8의 계산식은 남성과 13세 이상의 모든 참가자를 Group 1에 할당합니다.
그림 A.8 Or 함수 생성
Figure A.9의 왼쪽에 있는 true/false 테이블에서는 두 인수가 모두 true 또는 false가 되는 비결측값일 때 And( & ) 및 Or(| ) 함수의 결과를 보여 줍니다. 오른쪽의 테이블에서는 왼쪽 또는 오른쪽 표현식(a 및 b) 중 하나가 결측값이거나 둘 모두 결측값일 때의 결과를 보여 줍니다.
그림 A.9 And 및 Or 표현식의 결과
인수가 false일 때 결과가 1이 됩니다. 그렇지 않은 경우 Not의 결과는 0이 됩니다. Not 함수를 적용할 경우 모호성을 방지하기 위해 필요하면 괄호를 사용합니다. Not은 0 또는 1만 반환할 수 있으므로 예를 들어 !(weight==64)는 true 또는 false(1 또는 0)일 수 있지만 (!weight)==64는 항상 false(0)입니다. !(weight==64)와 같은 표현식을 weight != 64로 입력할 수도 있습니다.
두 점, 즉 지정된 인수에 해당하는 x1, y1과 x2, y2 사이에서 y 값을 선형으로 보간합니다. 삽입 키를 사용하여 x, y 인수 쌍을 추가로 삽입할 수 있습니다. Interpolate는 x 값에 해당하는 x, y 점의 쌍을 찾고 보간을 완료합니다.
그림 A.10 Interpolate의 예
Step은 Interpolate와 유사하지만, x 및 y 인수보다 작거나 같으면서 가장 큰 x 값에 해당하는 y 값을 반환한다는 점이 다릅니다. 즉, 이 함수는 점 사이의 선형 적합이 아니라 step 함수에서 지정된 x에 대해 해당하는 y를 구합니다. Interpolate와 마찬가지로, x 및 y 인수 쌍을 원하는 만큼 추가할 수 있습니다.
그림 A.11 Step의 예
while 조건이 true일 때 body 인수의 문을 반복합니다. init와 next는 반복을 제어합니다.
expr 조건을 반복적으로 테스트하고 expr이 더 이상 true가 아닐 때까지 body를 실행합니다.
Break는 루프의 실행을 완전히 중지하고 계속해서 루프 다음의 문을 실행합니다. Continue는 현재 루프 반복을 끝내고 다음 반복의 루프를 시작합니다.
둘 모두 For, While 및 For Each Row 루프에서 사용됩니다.
실행 중인 스크립트를 즉시 중지합니다.
사용자 정의 함수에서 표현식 값을 반환합니다.