圖循環中的子句我有一些代碼旨在基於某些過濾來生成報告。它將被送入兩個列表,第一個將確定提取哪些材質(在此示例中為Gender_List),第二個將確定繪製哪些屬性的圖形(在本示例中為Property_List)。想法是每個性別都會有一個循環,將為所有選定的屬性創建一個圖形矩陣。報告頂部還有一個總體的,未過濾的圖形
有兩種方法可以做到這一點。
第一個在圖形中具有固有的where子句。我大部分都可以使用它,除了Where子句最終在line-up框中佔據一席之地。 同樣由於以下原因,我在下面的模型中有一個我不完全理解的錯誤(我的完整版沒有該錯誤,但是如果有人知道如何修復它,仍然會感到好奇)。這是樣機代碼
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版本,那麼我不需要擔心數據過濾器上下文框/包裝。
無論如何,關於如何清理上面的代碼以從排隊框中刪除那些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 = 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] ) )
)
)
);
);回复:圖循環中的子句絕對是一項重大改進,但看起來我仍然在陣容框中顯示懸掛的“ where(:Sex == Gender_List [j]””子句。 知道如何殺死它嗎?回复:圖循環中的子句例如,您可以在腳本末尾使用以下命令刪除它們:
whereTb = w << XPath("//TextBox[contains(text(), 'Where(:sex == Gender_List[j])')]");
whereTb << Delete;但是在這種情況下,我想這將無濟於事,因為Lineup似乎是那些將文本框作為元素並且將窗口弄亂後再刪除它們的窗口。
回复:圖循環中的子句這個怎麼樣:
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]
))
);
);
);
);回复:圖循環中的子句似乎仍無法弄清楚如何擺脫陣容框中的“ 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的頂部,但這似乎不起作用。
關於如何清理此事有任何想法嗎?從技術上講這是可行的,但看起來有些古怪。
回复:圖循環中的子句如果添加@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;