80개의 고유한 값을 10개의 고유한 값으로 줄이기내 데이터 테이블에 80개 이상의 고유(명목) 텍스트 값이 있는 열이 있습니다. 이 80개의 명목 값을 JSL에서 10으로 줄이고 싶습니다. 상위 10개(발생 횟수 기준)에 없는 값을 "기타"라는 그룹으로 결합합니다. JSL에서 이것을 수행하는 가장 간단한 방법은 무엇입니까? 당신의 도움을 주셔서 감사합니다!
Re: 80개의 고유 값을 10개의 고유 값으로 줄이기@twillkickers , 질문에 대한 대답은 "예"입니다. JSL을 사용하면 그래프 빌더 또는 파레토 플롯을 조작하여 원하는 디스플레이를 제공할 수 있습니다. 그러나 Graph Builder의 Packed Bar 옵션은 원하는 거의 모든 것을 얻을 수 있습니다(최저 원인의 합계에 대한 레이블 제외). 이 합계를 표시하려면 앞에서 언급한 대로 약간의 조작이 필요합니다. 추가 조작이 노력할 가치가 있는지 여부를 결정하기 전에 고려해야 할 사항은 이 합계가 실제로 중복된 정보라는 것입니다. 상대 막대 높이와 y축이 이 정보를 시각적으로 전달합니다.
즉, "기타" 열의 합계를 표시해야 하는 경우 취할 수 있는 접근 방식이 있습니다(여전히 Nicardipine.jmp를 예로 사용).
이전에 제공된 배포 플랫폼 스크립트를 사용하여 원인 수준(1-9 및 10+)에 대한 열을 만듭니다.
새 범주에 대한 수식 열을 만듭니다. 예:
If( :Level Investigator Name < 10, :Investigator Name, "Other")
그래프 빌더를 사용하여 레벨 열에 따라 정렬된 새 범주에 대한 막대 차트를 만듭니다("기타" 범주를 오른쪽으로 원한다고 가정합니다. 그렇지 않으면 축을 마우스 오른쪽 버튼으로 클릭하고 개수별 정렬을 선택하여 "기타"가 맞는 위치를 확인합니다. 상위 9개 원인 내):
Graph Builder(
Size( 869, 318 ),
Show Control Panel( 0 ),
Variables(
X(
:New Investigator Name,
Order By(
:Level Investigator Name,
Ascending,
Order Statistic( "Sum" )
)
)
),
Elements( Bar( X, Legend( 3 ), Label( "Label by Value" ) ) )
);
이러한 모든 작업을 함께 붙여서 스크립트를 만들 수 있습니다. 이에 대한 도움이 필요하면 도움말->도서->스크립팅 가이드 및 도움말->스크립팅 색인을 참조하고 "새 열"을 검색하여 데이터 테이블에 새 수식 열을 만드는 구문을 얻을 것을 제안합니다.
Re: 80개의 고유 값을 10개의 고유 값으로 줄이기@jerry_cooper 감사합니다. 파레토 플롯에 대해 질문이 있습니다. JSL이 상위 10개 원인을 제외한 모든 원인을 자동으로 가져와서 개별적으로 그룹화하려는 원인을 지정하는 대신 "기타" 막대로 그룹화할 수 있습니까? 그래프 빌더에게 처음 10개 값을 제외한 모든 값을 그룹화하도록 지시하면 JSL 코드는 다음과 같이 됩니다.
Pareto Plot(
Cause( :Cause ),
Show **bleep** Percent Curve( 0 ),
Combine Causes(
{"Cause1","Cause2","Cause3","Cause4","Cause5","Cause6"}
),
SendToReport(
Dispatch( {"Plots"}, "102", ScaleBox, {Max( 4512.67559361611 )} ),
Dispatch( {"Plots"}, "106", ScaleBox, {Max( 100.059325800801 )} ),
Dispatch( {"Plots"}, "Pareto Report", FrameBox, {Frame Size( 1061, 702 )} )
)
);내 응용 프로그램의 경우 원인이 수시로 우선 순위가 변경될 수 있습니다. JSL이 Pareto Plot이 생성될 때마다 상위 10개 원인을 자동으로 다시 계산하기를 바랍니다.
Re: 80개의 고유 값을 10개의 고유 값으로 줄이기@twillkickers , 맞습니다. 포장 막대 차트는 기본 막대에 대한 값만 표시합니다. 값을 표시해야 하는 경우 가장 간단한 방법은 Pareto Plot 옵션을 사용하는 것입니다.
Re: 80개의 고유 값을 10개의 고유 값으로 줄이기@jerry_cooper , 당신의 도움을 주셔서 감사합니다! "포장" 막대 스타일을 사용할 때 막대에 다른 범주로 레이블을 지정하는 방법이 있습니까? 각 막대에 대한 내 수량 레이블은 포장되지 않은 막대에만 나타납니다. 당신의 도움을 주셔서 감사합니다.
Re: 80개의 고유한 값을 10개의 고유한 값으로 줄이기안녕 @twillkickers ,
귀하의 요청에 대한 궁극적인 목표가 무엇인지 확실하지 않지만 파레토 스타일 차트를 작성하는 것이라면 스크립트를 작성하거나 새 열을 작성하지 않고도 이 작업을 수행할 수 있습니다.
버전 14가 있는 경우 Graph Builder의 새로운 "Packed Bars" 요소가 설명하는 작업을 수행합니다. Sample Data 디렉토리의 Nicardipine.jmp 데이터 테이블을 사용하여 Investigator Name 열을 Y 역할로 드래그한 다음 막대 스타일로 "Packed"를 선택하고 Packed Primaries에 9를 입력한 다음 마지막으로 "Separate Stack"을 선택합니다. 묶음 배치 드롭다운:

다른 옵션, 특히 v14 이전 버전의 경우 품질 및 프로세스 메뉴에서 파레토 플롯을 선택할 수 있습니다. 플롯의 빨간색 삼각형 메뉴에서 원인=>원인 결합 메뉴 항목을 선택하고 "마지막 원인" 라디오 버튼을 선택한 다음 숫자 상자에 71을 입력합니다.

스크립트가 레벨 1-10으로 새 열을 생성하도록 하려면 다음(배포 플랫폼 사용)이 한 가지 방법입니다. 적절한 경우 데이터 테이블과 열 이름을 대체하십시오.
Names Default to Here( 1 );
dt = Open("$Sample_Data/Nicardipine.jmp");
dist = Distribution( Nominal Distribution( Column( :Investigator Name ) ) );
dist << Order By( Count Descending );
dist << Save( Level Numbers );
dist << Close Window;
therows = dt << Get Rows Where( :Level Investigator Name >= 10 );
dt:Level Investigator Name[ therows ] = 10;
도움이 되었기를 바랍니다.
Re: 80개의 고유한 값을 10개의 고유한 값으로 줄이기@twillkickers ,
원하는 작업을 수행하는 방법에는 여러 가지가 있습니다. 표, 배포 또는 요약과 같습니다. 요약 접근 방식을 사용하여 구현하는 방법을 보여 드리겠습니다.
// Open Sample Data Table
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// Get frequency
dt1 = dt << Summary(
Group( :name ),
Freq( "None" ),
Weight( "None" )
);
// Let us assume weight column in this data table represents the frequency in your case
dt2 = dt1 << Sort(By(:N Rows),Order(descending));
// Select only top 10
dt2 << Select Rows(Index(1,10));
// If you want to hide and exclude the remaining
dt2 << Invert Row Selection << hide and exclude ;
// OR
// If you want to delete the rows
dt2 << Delete Rows; Re: 80개의 고유한 값을 10개의 고유한 값으로 줄이기고유한 텍스트 값의 빈도를 나열하는 열은 어떻게 만듭니까?
Re: 80개의 고유한 값을 10개의 고유한 값으로 줄이기@twillkickers ,
고유한 텍스트 값 각각의 빈도 또는 발생 횟수를 나열하는 열도 있습니까? 그렇지 않은 경우 첫 번째 단계는 해당 데이터를 데이터 테이블로 가져오는 것입니다. 이것이 가능하면 열을 내림차순으로 정렬하고 상위 10개 행을 선택할 수 있습니다. 내가 할 방법은 다음과 같습니다.
// Open Sample Data Table
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// Let us assume weight column in this data table represents the frequency in your case
dt1 = dt << Sort(By(:weight),Order(descending));
// Select only top 10
dt1 << Select Rows(Index(1,10));
// If you want to hide and exclude the remaining
dt1 << Invert Row Selection << hide and exclude ;
// OR
// If you want to delete the rows
dt1 << Delete Rows;