범주형 변수의 모든 레벨에 대해 동일한 출력 스크립팅안녕,
몇 가지 계산을 수행하고, 여러 플랫폼을 실행하고, 특정 출력을 추출한 다음, 새 창에 탭 상자를 생성하는 스크립트가 있습니다. 사용자가 대화 상자에서 지정한 범주형 변수의 각 레벨에 대해 이 모든 작업을 수행하고 싶습니다.
현재는 그룹화 변수를 기반으로 데이터의 개별 하위 집합을 만든 다음 해당 데이터 집합 각각을 반복합니다.
dtSubset = dt << Subset( By( Eval( groupVar ) ), Linked, Selected Columns Only( 0 ), All Rows( 1 ), Invisible );
For( i = 1, i <= N Items( unique_groups ), i++,
dt_i = dtSubset[i];
...some code to do stuff
<BR />...append output as a new tab box in my window
);
Essentially all I am doing is coding up my own analysis and wanting a 'By' variable. I am wondering if there is a better or more efficient way to go about this? The main thing I want with the code is to have the output I create be specific for each level, while also still maintaining a connection to the original data table (meaning the plots in my output are interactive still).
보시다시피, 저는 하위 집합을 Invisible로 생성한 다음 코드 내에서 루프의 각 반복이 끝날 때마다 하위 집합을 닫습니다.
감사해요,
로버트
자동화 및 스크립팅Re: 범주형 변수의 모든 레벨에 대해 동일한 출력 스크립팅플랫폼 내에서 By 변수를 사용하지 않는 데에는 이유가 있나요?
Re: 범주형 변수의 모든 레벨에 대해 동일한 출력 스크립팅그룹화 열을 사용하여 데이터 테이블에서 탭 상자를 만드는 세 가지 방법이 있습니다. JMP18 이상(아마도)을 사용 중이라면 마지막 방법이 가장 간단합니다.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// Using subsets
dt_subsets = dt << Subset(
By(:age),
Linked,
Selected Columns Only(0),
All Rows(1),
Invisible
);
nw = New Window("Subsets",
tb = tab box()
);
dists = {};
For Each({dt_subset}, dt_subsets,
tb << Insert(Tab Page Box(Title(dt_subset << get name),
dt_subset << Distribution(
Continuous Distribution(Column(:weight)),
Nominal Distribution(Column(:age))
);
));
);
tb << Set Selected(1);
// Using Where in platform
nw = New Window("Where",
tb = tab box()
);
groups = Associative Array(Column(dt, "age")) << get keys;
dists = {};
For Each({group}, groups,
tb << Insert(Tab Page Box(Title("age=" || Char(group)),
dist = dt << Distribution(
Continuous Distribution(Column(:weight)),
Nominal Distribution(Column(:age)),
Where(:age == group)
);
));
(Report(dist) << Top Parent)[TextBox(1)] << Visibility("Collapse"); // to hide Where(... textbox
);
tb << Set Selected(1);
// Using By in platform
dist = dt << Distribution(
Group Options(Layout("Arrange in Tabs")),
Continuous Distribution(Column(:weight)),
Nominal Distribution(Column(:age)),
By(:age)
);
Re: 범주형 변수의 모든 레벨에 대해 동일한 출력 스크립팅Jarmo의 그룹별 예제를 확장하여 출력에 탭 창을 만드는 예제를 소개합니다.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// Using By in platform
dist = dt << Distribution(Invisible,
Group Options(Layout("Arrange in Tabs")),
Continuous Distribution(Column(:weight)),
Nominal Distribution(Column(:age)),
By(:age)
);
// Create a new window and add tabs for each age
nw = New Window( "Tabs",
tabb = Tab Box();
);
For( i = 1, i <= N Items( dist ), i++,
display = Report( dist[i] );
theByGroup = display[Outline Box( 1 )] << get title;
tabb << append( Tab Page Box( Title( theByGroup ), display ) );
);

Re: 범주형 변수의 모든 레벨에 대해 동일한 출력 스크립팅사실 가장 큰 이유는 변수의 여러 레벨을 반복하고 각 탭 창을 그런 식으로 구성한 다음 추가하는 것이 더 간단하다는 것을 알았기 때문입니다. 각 레벨마다 표에 대한 계산을 수행하고, 그래프 빌더로 그래프를 작성하고, Dist 플랫폼에서 qq 플롯을 추출하고, 적합 모델 플랫폼에서 스튜던트화 잔차 플롯을 추출하는 등의 작업을 하기 때문입니다.
Re: 범주형 변수의 모든 레벨에 대해 동일한 출력 스크립팅두 분 모두 의견 주셔서 감사합니다. 제공된 코드는 모두 잘 작동합니다. 덧붙여 말씀드리자면, 저는 다양한 플랫폼에서 데이터를 가져와서 참신한 결과물을 만들어내는 꽤 복잡한 애드인을 개발하고 있습니다. 제가 정말 원했던 것은 데이터 테이블에 일반적으로 연결된 플롯과 테이블이 그대로 유지되도록 하는 것이었습니다. 또한 모든 탭이 똑같이 보이도록 하고 싶었기 때문에 루프를 사용하는 것이 쉬운 해결책으로 보였습니다.
이 문제를 해결하는 가장 좋은 방법은 내가 사용하는 모든 플랫폼에서 By 옵션을 사용한 다음 다양한 경로를 사용하여 각 구성 요소를 호출하고 원하는 위치에 추가하는 변수의 수준을 반복하는 것이라고 생각하십니까?
Re: 범주형 변수의 모든 레벨에 대해 동일한 출력 스크립팅Jim이 보여준 것처럼 추가하면 상호 작용성이 떨어집니다. Subset/Where는 둘 다 잘 작동하지만, 요약 테이블 생성과 같이 Where를 쉽게 활용할 수 없는 경우가 있습니다(단순 Where 대신 로컬 데이터 필터를 사용함). 또한, Subset을 사용하면 메인 테이블을 닫을 때 예상대로 닫히지 않아 많은 데이터 테이블을 처리해야 할 수 있습니다. 경우에 따라 데이터 필터 컨텍스트 상자를 사용하여 여러 플랫폼에 하나의 필터를 사용할 수 있으므로 로컬 데이터 필터를 사용하는 것도 고려해 볼 만합니다.