문제
문제 1: 데이터 테이블 열의 고유 값 목록을 가져와야 합니다.
문제 2: JSL 데이터 구조(목록 또는 행렬)에서 고유 값 목록을 가져와야 합니다.
해결책
문제 1:
해결책 1: 요약 테이블을 사용하십시오.아래의 JSL은 Summary()를 사용하여 단일 열에 각각 고유한 값이 있는 행이 있는 테이블을 가져오는 방법을 보여줍니다.그런 다음 추가 JSL 테이블 명령을 수행하여 요약 테이블에서 해당 값을 가져올 수 있습니다.
_dt = Open( "$sample_data/big class.jmp" );
//create a summary table of the :sex column
_dt1 = _dt << Summary(
Group( :sex ),
Freq( "None" ),
Weight( "None" )
);
//create a summary table of the :age column
_dt2 = _dt << Summary(
Group( :age ),
Freq( "None" ),
Weight( "None" )
);
<SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="2-13-2018 5-22-08 PM.png" style="width: 280px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="2-13-2018 5-22-08 PM.png" style="width: 280px;"><span class="lia-inline-image-display-wrapper" image-alt="2-13-2018 5-22-08 PM.png" style="width: 280px;"><img src="https://us.v-cdn.net/6038925/uploads/images/9328i5A075F342798D202/2-13-2018%205-22-08%20PM.png" role="button" title="2-13-2018 5-22-08 PM.png" alt="2-13-2018 5-22-08 PM.png" /></span></SPAN></SPAN>
문제 2:
이제 데이터 테이블 대신 JMP 목록 또는 행렬이 있습니다.
sexlist = {"F", "M", "M", "F", "F", "M", "M", "F", "M"};
agelist = [14, 11, 12, 13, 15, 17, 15, 11, 12];이를 수행하는 복잡한 방법은 다음과 같습니다.
a) 목록의 값을 새 데이터 테이블 열에 입력한 다음 요약 접근 방식을 사용하거나
b) 고유 값을 검색하고 기록하기 위해 다소 복잡한 for 루프를 작성합니다.
다행히 연관 배열을 사용하는 더 쉬운 방법이 있습니다.
Associative Array(sexlist) << Get Keys;
Associative Array(agelist) << Get Keys;
각각 {"F", "M"} 및 {11, 12, 13, 14, 15, 17}을 반환합니다(이것들은 멋진 정렬 목록입니다!).숫자 값을 정렬된 벡터로 사용하려면 다음을 사용할 수 있습니다.
Matrix(Associative Array(agelist) << Get Keys);
[11, 12, 13, 14, 15, 17]을 반환합니다.
이 접근 방식은 문제 1에 대한 솔루션 1 대신 사용할 수도 있습니다.
문제1, 해결책 2:Associative Array(Column(_dt, "sex") << Get Values) << Get Keys;<BR />Matrix(Associative Array(Column(_dt, "age")<< Get Values)<<GET keys=""></GET>
보고 {"F", "M"} 및 [11, 12, 13, 14, 15, 17] 각각. 이것이 하는 일은
- 지정된 열에서 목록(열이 문자인 경우) 또는 행렬(열이 숫자인 경우)로 값을 가져옵니다.
- 해당 목록 또는 행렬을 연관 배열로 전환
- 연관 배열에 대한 키를 가져옵니다. 이 경우 열에 있는 값의 고유 수준이며 목록으로 반환됩니다.
- (Matrix()가 결과 목록에 사용되는 경우 목록의 값이 모두 숫자인 경우에만 작동합니다.)
Summarize()는 연관 배열보다 훨씬 더 효율적이며 2백만 행의 데이터(1초 대 8초 시간 경과)에서 매우 분명합니다. 성능이 중요한 경우 가능하면 Summarize()를 사용하십시오.
요약( dt, smrz1 = by( :sex ) ); 요약( dt, smrz2 = by( :age ) );
* Summarize()는 중간 데이터 테이블을 << Summary로 생성하지 않음
Associative Array는 목록/매트릭스를 데이터 테이블에 넣는 노력을 절약한다는 점에서 훌륭합니다. 이것은 작은 데이터 크기에 대한 완벽한 솔루션입니다.