그래프 루프의 Where 절일부 필터링을 기반으로 보고서를 작성하도록 설계된 코드가 있습니다.두 개의 목록이 제공됩니다. 첫 번째 목록은 가져올 재료 (이 예에서는 Gender_List가 됨)를 결정하고 두 번째 목록은 그래프로 표시되는 속성을 결정합니다 (이 예에서는 Property_List가 됨).선택한 모든 속성에 대한 그래프 매트릭스를 생성하는 각 성별에 대한 루프가 있다는 아이디어입니다.보고서 상단에 필터링되지 않은 전체적인 그래프도 있습니다.
이를 수행하는 두 가지 방법이 있습니다.
첫 번째는 그래프에 내장 where 절이 있습니다.Where 절이 라인업 상자에서 위치를 차지한다는 점을 제외하면 대부분이 작업을 수행했습니다. 또한 모형에 어떤 이유로 든 내가 완전히 이해하지 못하는 버그가 있습니다 (내 정식 버전에는 해당 버그가 없지만 누군가가 그것을 고치는 방법을 알고 있다면 여전히 궁금합니다).다음은 모형 코드입니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Gender_List = {"M","F"};
age_list = {12,13,14,15};
Property_List = {"Age", "Height", "Weight"};
w= new window("test",
VLB = V List Box ("A",
dt<<DISTRIBUTION></DISTRIBUTION>
두 번째는 그래프 루프의 각 반복을 래핑하는 데이터 필터 컨텍스트 상자입니다.내가 일할 수 없었던 그거.위의 버전을 사용할 수 있다면 데이터 필터 컨텍스트 상자 / 랩에 대해 너무 걱정할 필요가 없다고 생각합니다.
어쨌든, 위의 코드를 정리하여 라인업 상자에서 Where 절을 제거하는 방법에 대한 생각이 있으십니까?
스크립팅Re : 그래프 루프의 Where 절대본을 약간 수정했습니다.작동하지 않는 코드에 재귀 적 Append가 있습니다.이것이 당신이 원하는 것을 얻는 지보십시오
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Gender_List = {"M", "F"};
age_list = {12, 13, 14, 15};
Property_List = {"Age", "Height", "Weight"};
w = New Window( "test", VLB = V List Box( Text Box( "A" ), dt << Distribution( Nominal Distribution( Column( :age ) ) ) ) );
For( j = 1, j <= N Items( Gender_List ), j++,
VLB << Append( Text Box( Gender_List[j] ) );
VLB << Append(
LB = LB = Lineup Box( N Col( 2 ), spacing( 10 ),
For( i = 1, i <= N Items( Property_List ), i++,
gb = dt << Distribution( Continuous Distribution( Column( Property_List[i] ) ), where( :Sex == Gender_List[j] ) )
)
)
);
);Re : 그래프 루프의 Where 절확실히 크게 개선되었지만 여전히 라인업 상자에 "where (: Sex == Gender_List [j]"절이 표시되는 것처럼 보입니다. 어떻게 죽일 지 아세요?Re : 그래프 루프의 Where 절예를 들어 스크립트 끝에서 다음과 같이 제거 할 수 있습니다.
whereTb = w << XPath("//TextBox[contains(text(), 'Where(:sex == Gender_List[j])')]");
whereTb << Delete;그러나이 경우 Lineup은 Where 텍스트 상자가 요소로 보이고 창을 삭제하기 전에 엉망으로 보이기 때문에 도움이되지 않을 것이라고 생각합니다.
Re : 그래프 루프의 Where 절이것은 어떤가요:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Gender_List = {"M", "F"};
age_list = {12, 13, 14, 15};
Property_List = {"Age", "Height", "Weight"};
w = New Window( "test", VLB = V List Box( Text Box( "A" ), dt << Distribution( Nominal Distribution( Column( :age ) ) ) ) );
For( j = 1, j <= N Items( Gender_List ), j++,
VLB << Append( Text Box( Gender_List[j] ) );
VLB << Append(
LB = Lineup Box( N Col( 2 ), spacing( 10 ),
For( i = 1, i <= N Items( Property_List ), i++,
eval(substitute(
expr(dt << Distribution( Continuous Distribution( Column( _col_ ) ), where( :Sex == _select_) )),
expr(_col_),Property_List[i],
expr(_select_), Gender_List[j]
))
);
);
);
);Re : 그래프 루프의 Where 절여전히 라인업 상자에서 "where"절을 제거하는 방법을 알아낼 수없는 것 같습니다.머리글 / 바닥 글 환경 설정이이를 제거하는지 확인하기 위해 그래프 작성기 개체로 전환했지만 그렇게하지 않는 것 같습니다.
나는 이것을 LB를 감싸는 데이터 필터로 다시 작성하려고 시도했습니다.사용자가 일부 사용자 정의를 허용하므로 어쨌든 몇 가지 장점이 있습니다.이 보인다 하지만 보시다시피 데이터 필터가 엄청나게 축소 되었기 때문에 약간 이상해 보입니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Gender_List = {"M", "F"};
age_list = {12, 13, 14, 15};
Property_List = {"Age", "Height", "Weight"};
w = New Window( "test", VLB = V List Box( Text Box( "A" ),
dt << Graph Builder(Size( 534, 450 ),
Show Control Panel( 0 ),
Variables( X( :age ) ),
Elements( Histogram( X, Legend( 6 ) ) )
)
)
);
For( j = 1, j <= N Items( Gender_List ), j++,
VLB << Append( Text Box( Gender_List[j] ) );
VLB << Append(
data filter context box(
LB = LB = Lineup Box( N Col( 2 ), spacing( 10 ),
For( i = 1, i <= N Items( Property_List ), i++,
gb = dt << Graph Builder(
Size( 534, 450 ),
Show Control Panel(0 ),
Variables( X(Column( Property_List[i] ) )),
Elements( Histogram( X, Legend( 6 ) ) ),
/*Where( :Sex == Gender_List[j] ) ),*/
),
)
),
dt<<DATA filter=""></DATA>
LB 상단에 데이터 필터를로드하려고했지만 작동하지 않는 것 같습니다.
이것을 정리하는 방법에 대한 생각이 있습니까?이것은 기술적으로 작동하지만 약간 멍청 해 보입니다.
Re : 그래프 루프의 Where 절추가하면 @jthi 내가 제공 한 코드에 코드를 추가하면 원하는 것을 얻을 수 있습니다.

Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Gender_List = {"M", "F"};
age_list = {12, 13, 14, 15};
Property_List = {"Age", "Height", "Weight"};
w = New Window( "test", VLB = V List Box( Text Box( "A" ), dt << Distribution( Nominal Distribution( Column( :age ) ) ) ) );
For( j = 1, j <= N Items( Gender_List ), j++,
VLB << Append( Text Box( Gender_List[j] ) );
VLB << Append(
LB = LB = Lineup Box( N Col( 2 ), spacing( 10 ),
For( i = 1, i <= N Items( Property_List ), i++,
gb = dt << Distribution( Continuous Distribution( Column( Property_List[i] ) ), where( :Sex == Gender_List[j] ) )
)
)
);
);
whereTb = w << XPath("//TextBox[contains(text(), 'Where(:sex == Gender_List[j])')]");
whereTb << Delete;