프롬프트를 만들 때 오류가 발생했습니다.<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />저는 JMP를 처음 사용하며 "Jump into JMP 스크립팅"이라는 책에서 멋진 프롬프트를 만드는 방법에 대한 좋은 예를 찾았습니다.
그래도 간단한 프롬프트를 만들고 해당 프롬프트에서 선택한 값을 기반으로 스크립팅으로 하위 집합을 만드는 방법을 모르겠습니다.
프롬프트는 문자 열 변수 "yearm"에서 값을 '수집'해야 합니다. 예를 들어 [201007, 201012] 사이의 yearmonth 값을 기반으로 그래프 빌더를 만들고 싶습니다.
모든 의견을 환영합니다. 이 문제를 해결하는 데 도움을 주셔서 미리 감사드립니다.
오류 메시지: 잘못된 아래 첨자(숫자 또는 숫자 목록이어야 함){1} '아래 첨자' 액세스 또는 평가, quarter[select1 << get]
다음은 몇 가지 코드입니다.
요약( quarter= By( Column( dt, "yearm" ) ) );
nw = New Window( "분기 선택",
hb = 패널 상자( "연도 선택",
select1 = 목록 상자(분기,
dt << 선택 위치(
:yearm== quarter[select1 << get] );
selRows = dt << 선택한 행 가져오기;
)
),
버튼 상자( "확인",
nw << 창 닫기;
dt << 선택 위치(
:yearm== 분기[선택1 << 가져오기]
);
/* 선택된 행이 새 테이블로 하위 집합화됩니다. */
dt << Subset( 출력 테이블 이름( "선택된 분기" ) );
)
);
Re: 프롬프트를 만들 때 오류가 발생합니다.알겠습니다. 시도해보고 JMP가 10으로 업데이트되면 답장하겠습니다. 업데이트 미디어가 도착했지만 아직 대기 중입니다.
대단히 감사합니다. 당신은 이것의 프로 사용자입니다. 바라건대 나도 뭔가를 배우고 있습니다.
Re: 프롬프트를 만들 때 오류가 발생합니다.아야! 그러면 Contains()가 고통스럽게 느려질 것입니다. 내장된 Data Filter()를 프롬프트의 일부로 사용하는 것이 좋습니다. 큰 테이블의 경우 훨씬 빠릅니다.
JMP 10에서 아래 예를 시도해 보십시오(JMP 9에서와 같이 작동하지 않는 것 같습니다). 100만 행 테이블(MacPro 8x2.8GHz)의 경우 선택 및 부분 집합화는 거의 즉각적입니다.
//예제 테이블
dt = 새 테이블 ( "큰" ,
행 추가 ( 1000000 ) ,
새 열 ( "4분의 1" , 명사 같은 , 공식 ( 1 + 10 * 둥근 ( 무작위 유니폼 () / 삼 , 1 ) ) )
) ;
dt << 실행 공식 () ;
열 ( "4분의 1" ) << 수식 삭제 ;
//즉각적인
df = dt << 데이터 필터 ( 열 ( : 4분의 1 ) ) ;
rdf = df << 보고서 ;
rdf [ 개요 상자 ( 1 )] << 제목 설정 ( "하나 이상의 분기 선택" ) << 추가 (
버튼 박스 ( "하위 집합 만들기" ,
dt << 하위 집합 ( 출력 테이블 이름 ( "선택된 시대" ) ) ;
df << 닫다 , nw << 닫다
)
) ;
//선택적 costomization: rdf[listbox(4)]<Re: 프롬프트를 만들 때 오류가 발생합니다.
정말 좋은 조언을 해주셔서 감사합니다. 감사합니다! 이제 코드가 제대로 작동하지만 150만 행을 사용할 때 속도가 약간 느립니다.
Re: 프롬프트를 만들 때 오류가 발생합니다.예, 여기에서는 Contains() 함수가 더 우아합니다. 하지만 위의 예에서 하나의 항목만 선택하면 오류가 발생합니다. 아마도 alist_num [ 선택1 << 선택된 인덱스 가져오기 ] 그런 다음 숫자 목록 대신 숫자를 반환합니다.
여기
dt << 위치 선택 ( 포함 ( 선택1 << 선발되다 , 숯( : 나이) ) ) ;
더 잘 작동하며 :age가 문자인지 숫자인지에 관계없이 작동해야 합니다.
Re: 프롬프트를 만들 때 오류가 발생합니다.다음과 같은 목록을 사용하여 열을 검색하는 편리한 구조가 있습니다. 포함 기능.아래 코드는 사용 방법을 보여줍니다.
dt = 열려 있는 ( "$sample_data\빅 클래스.jmp" ) ;
요약하다 ( 나이 목록 = 에 의해 ( 열 ( dt , "나이" ) ) ) ;
alist_num = {} ;
~을 위한 ( 나 = 1 , 나 <= 나이트 ( 나이 목록 ) , 나 ++,
alist_num [ 나 ] = 숫자 ( 나이 목록 [ 나 ]) ;
) ;
nw = 새창 ( "연령 선택" ,
hb = 패널 박스 ( "연령 선택" ,
선택1 = 리스트 박스 (
나이 목록 ,
dt << 위치 선택 ( 포함 ( alist_num [ 선택1 << 선택된 인덱스 가져오기 ] , : 나이 ) ) ;
selRows = dt << 선택된 행 가져오기 ;
)
) ,
버튼 박스 ( "좋아요" ,
dt << 위치 선택 ( 포함 ( alist_num [ 선택1 << 선택된 인덱스 가져오기 ] , : 나이 ) ) ;
/* 선택된 행이 새 테이블로 하위 집합화됩니다. */
dt << 하위 집합 ( 출력 테이블 이름 ( "선택된 시대" ) ) ;
nw << 창 닫기 ;
)
) ;
Re: 프롬프트를 만들 때 오류가 발생합니다.비교
: 연 == quarter_list [ 선택1 << 얻다 ]
셀 값과 목록이 같은지 테스트하기 때문에 두 개 이상의 값에 대해 작동하지 않습니다. 항상 false를 반환합니다(셀에 목록이 포함될 수 없다고 생각합니다).
이를 수행하는 방법에는 여러 가지가 있습니다. 다음은 선택한 항목 목록을 반복하여 얻은 행 번호 행렬을 기반으로 행 선택이 이루어지는 한 가지 제안(OK 버튼 스크립트용)입니다.
버튼 박스 ( "좋아요" ,
행 = [] ;
엘 = quarter_list [ 선택1 << 선택된 지수 얻기 ] ;
을 위한 ( 나 = 1 , 나 <= N개 항목 ( 엘 ) , 나 ++,
행 = 행 || ( dt << 행 가져오기 ( : 연 == 엘 [ 나 ] ))
) ;
/* 선택된 행이 새 테이블로 하위 집합화됩니다. */
dt << 하위 집합 ( Rows(rows), 출력 테이블 이름 ( "선택된 숙소" ) ) ;
nw << 창 닫기 ;
)
Re: 프롬프트를 만들 때 오류가 발생합니다.감사합니다. 이제 변수의 값 하나만 선택해도 잘 작동합니다. 예를 들어 Shitf를 눌러 새 데이터에 대한 변수의 값 세 개를 선택하려면 어떻게 해야 합니까?
Re: 프롬프트를 만들 때 오류가 발생합니다.목록 색인으로 사용될 때 대괄호 안에 있는 것은 숫자(또는 숫자 목록)여야 합니다. 대신 시도
quarter_list [ 선택1 << 선택된 지수 얻기 ]
Re: 프롬프트를 만들 때 오류가 발생합니다.팁을 주셔서 감사합니다.
여전히 [select1 << get] 포인트에 대해 불평합니다.
그 변수 yearm은 문자변수이고 yearm을 숫자변수로 만들어도 소용없었다.
"'Subscript', quarter_list[select1 << get]의 액세스 또는 평가에서 잘못된 아래 첨자(숫자 또는 숫자 목록이어야 함){1}"
Re: 프롬프트를 만들 때 오류가 발생합니다.분기는 JMP 함수이기도 하므로 변수로 사용하지 않습니다.아마도 quarter_list?또한 창 닫기 문을 마지막에 넣으십시오.테스트 해제 코드:
요약하다 ( quarter_list = 에 의해 ( 열 ( dt , "연" ) ) ) ;
nw = 새창 ( "분기 선택" ,
hb = 패널 박스 ( "년을 선택하세요" ,
선택1 = 리스트 박스 (
quarter_list ,
dt << 위치 선택 ( : 연 == quarter_list [ 선택1 << 얻다 ] ) ;
selRows = dt << 선택된 행 가져오기 ;
)
) ,
버튼 박스 ( "좋아요" ,
dt << 위치 선택 ( : 연 == quarter_list [ 선택1 << 얻다 ] ) ;
/* 선택된 행이 새 테이블로 하위 집합화됩니다. */
dt << 하위 집합 ( 출력 테이블 이름 ( "선택된 숙소" ) ) ;
nw << 창 닫기 ;
)
) ;