图循环中的子句我有一些代码旨在基于某些过滤来生成报告。它将被送入两个列表,第一个将确定提取哪些材质(在此示例中为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;