조건부 선택 위치<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />'태그'당 25개 미만의 행이 있는 데이터를 선택 및 하위 집합으로 설정하고, 하위 집합을 저장하고, 기본 작업 데이터 집합에서 하위 집합을 제거하는 아래 JSL 코드가 있습니다. 이는 25행 미만의 태그가 있는 경우에는 잘 작동하지만 강력해야 하고 25행 미만의 태그가 없는 경우에도 작동해야 합니다. 이 경우 4~6행을 무시하고 7행을 계속 진행하여 저장해야 합니다. 새 이름의 기본 작업 데이터세트입니다. 어떻게 이를 달성할 수 있나요?
많은 감사
1 열기( "data.jmp" );
2 dt=현재 데이터 테이블() << 요약( 그룹( :tag ) );
3 데이터 테이블( "데이터 기준(태그)" ) << Select Where( :N 행 < 25) << Sort( 기준( :N 행 ), Order( 오름차순 ), 출력 테이블 이름("summary_of_small_n"));
4 데이터 테이블( "data" ) << Subset(( 선택한 행 ), 출력 테이블 이름("sub_small_n"));
5 데이터 테이블( "sub_small_n" ) << save("sub_small_n.jmp");
6 데이터 테이블( "summary_of_small_n" ) << save("summary_of_small_n.jmp");
7 데이터 테이블( "data" ) << 행 삭제 << save("data_less_small_n.jmp");
Re: 조건부 선택 위치좀 더 만지작거린 후에 아래 내용이 나에게 맞는 것 같습니다. 도와 주셔서 감사합니다.
열기("data.jmp");
dt = 현재 데이터 테이블() << Summary( Group( :tag ) );
데이터 테이블( "데이터 기준(태그)" ) << Select Where( :N 행 < 25) << Sort( 기준( :N 행 ), Order( 오름차순 ), 출력 테이블 이름("summary_of_small_n_tag"));
데이터 테이블( "summary_of_small_n_tag" ) << save("summary_of_small_n_tag.jmp");
num_selected = nrows(dt << 선택한 행 가져오기);
if(num_selected(dt > 0),
// 조건이 만족되면 이렇게 하세요...
데이터 테이블( "data" ) << Subset(( 선택한 행 ), 출력 테이블 이름("sub_small_n"));
데이터 테이블( "sub_small_n" ) << save("sub_small_n.jmp");
데이터 테이블( "data" ) << 행 삭제 << save("data_less_small_n.jmp");
,
// 아니면 이렇게 하세요...
데이터 테이블( "데이터" ) << save(" data_less_small_n.jmp ");
);
Re: 조건부 선택 위치@rijking
포인트 (a)를 기반으로 - 어쩌면 반전 선택 작업을 시도해 볼 수 있을까요? 시도해 보셨나요?작동하지 않는 경우 문제를 재현하여 도움을 드릴 수 있도록 샘플 데이터 라이브러리에서 문제에 맞는 샘플 데이터 테이블 하나를 제안해 주시겠습니까?
최상의
우데이
Re: 조건부 선택 위치이안, 고마워요. 이것은 다음과 같이 작동하지 않습니다.
a) 나는 선택된 행 (NRow가 작동한다고 이해하는 총 행이 아님) - dt2는 25개 미만인 태그뿐만 아니라 모든 태그에 대한 총 행 수를 요약하기 때문입니다.
b) dt2에서 선택한 행을 참조하는 경우 > 24가 아닌 > 0이어야 한다고 생각합니다. dt2는 모든 태그에 대한 총 행 수를 요약하므로 선택한 모든 행에 관심이 있습니다(단 하나의 행만 있더라도). ; 기본 dt에서 25개 미만의 행에 나타나는 태그를 요약하는 것입니다.
다른 제안을 주시면 감사하겠습니다. 감사합니다.
Ian@JMP wrote:You need to use the 'NRow()' function in combination with an 'If()' expression. Something like:Open( "data.jmp" );dt = current data table() << Summary( Group( :tag ) );dt2 = Data Table( "data By (tag)" ) << Select Where( :N Rows < 25) << Sort( By( :N Rows ), Order( Ascending ), Output Table Name("summary_of_small_n"));if( NRow(dt2 > 24, // If the condition is satisfied, do this . . . Data Table( "data" ) << Subset(( Selected Rows ), Output Table Name("sub_small_n")); Data Table( "sub_small_n" ) << save("sub_small_n.jmp"); Data Table( "summary_of_small_n" ) << save("summary_of_small_n.jmp") , // Else do this . . . Data Table( "data" ) << delete rows << save("data_less_small_n.jmp"); );
Re: 조건부 선택 위치'If()' 표현식과 함께 'NRow()' 함수를 사용해야 합니다. 다음과 같은 것 :
열려 있는 ( "데이터.jmp" ) ;
dt = 현재 데이터 테이블 () << 요약 ( 그룹 ( : 꼬리표 ) ) ;
dt2 = 데이터 테이블 ( "데이터 기준(태그)" ) << 위치를 선택하세요 ( : N 행 < 25 ) << 종류 ( 에 의해 ( : N 행 ) , 주문하다 ( 오름차순 ) , 출력 테이블 이름 ( "summary_of_small_n" )) ;
만약에 (
Nrow ( dt2 > 24 ,
// 조건이 만족되면 이렇게 합니다. . .
데이터 테이블 ( "데이터" ) << 하위 집합 (( 선택한 행 ) , 출력 테이블 이름 ( "sub_small_n" )) ;
데이터 테이블 ( "sub_small_n" ) << 구하다 ( "sub_small_n.jmp" ) ;
데이터 테이블 ( "summary_of_small_n" ) << 구하다 ( "summary_of_small_n.jmp" )
,
// 그렇지 않으면 이렇게 합니다. . .
데이터 테이블 ( "데이터" ) << 행 삭제 << 구하다 ( "data_less_small_n.jmp" ) ;
) ;