열 이름을 직접 호출하지 않고 조건부 하위 집합 테이블을 만들려면 어떻게해야합니까?이 스크립트의 처음 3 줄은 높이가 60보다 작은 새 데이터 테이블을 만듭니다. 이 부분은 잘 작동합니다.
개발하려는 함수의 경우 : height를 사용하는 것과 다른 방식으로 열을 참조하고 싶습니다.
열을 참조하는 4 가지 방법을 시도했지만 그중 아무것도 작동하지 않습니다. 열 함수를 사용하고 열 참조 함수를 얻었습니다 (아래 참조).
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
//This one works
dtSubgroup = dt << Subset(Rows(dt << get rows where(:height < 60)));
//None of these work
dtSubgroup = dt << Subset(Rows(dt << get rows where(Column("height") < 60)));
dtSubgroup = dt << Subset(Rows(dt << get rows where(Column(dt, "height") < 60)));
dtSubgroup = dt << Subset(Rows(dt << get rows where(Column(4) < 60)));
refList = dt << Get Column Reference( {"height"} );
dtSubgroup = dt << Subset(Rows(dt << get rows where(refList[1] < 60)));그들이 작동하지 않는 이유가 있습니까?
해결책에 대한 제안?
도와 주셔서 감사합니다.
Re : 열 이름을 직접 호출하지 않고 조건부 하위 집합 테이블을 만들려면 어떻게해야합니까?Column () 함수의 닫는 괄호 뒤에 빈 대괄호를 추가하십시오. 이처럼 :
Column("height")[] < 60
이 변경이 도움이됩니까?
Re : 열 이름을 직접 호출하지 않고 조건부 하위 집합 테이블을 만들려면 어떻게해야합니까?고마워, 이것은 내가 원하는 것을 정확하게했다.
왜 이것이 작동하는지 물어봐도 될까요?
대괄호를 사용하지 않고 열 기능을 여러 번 사용했습니다.
이 경우와 다른 점은 무엇입니까? 따라야 할 규칙은 무엇입니까?Re : 열 이름을 직접 호출하지 않고 조건부 하위 집합 테이블을 만들려면 어떻게해야합니까?이상해 보이지 않습니까?
그것은 맥락에 관한 것입니다. 예를 들어 이것을 열 수식에 사용할 수 있습니다.
If( Column("height") < 60, 0, 1 ); // implicit assignment of Row() = current row number
또는 For Each Row () 함수에서이를 사용하여 스크립트에서 동일한 작업을 수행 할 수 있습니다.
For Each Row(
// implicit assignment of Row() = current row number
If( Column("height" ) < 60,
:status = "small",
:status = "large"
)
)
열 수식의 컨텍스트와 반복은 JMP가 암시 적으로 Row () 함수를 설정하는 것과 같습니다. 따라서 JMP는이 정보를 사용하여 값을 가져 오거나 저장할 위치 (즉, 어떤 행)를 알아냅니다. 그것은 일반적인 경우의 맥락이 아닙니다.
dtSubgroup = dt << Subset(Rows(dt << get rows where(Column("height") < 60)));
데이터 테이블은 비교를 평가할 때 현재 행 번호를 내재적으로 사용하지 않습니다. 빈 첨자 연산자 []를 추가하여이를 강제 실행합니다.