col list box()不尊重数据表引用使用JMP 14.1:
我希望人们选择两个数据表,然后在两个col列表框中显示这些数据表中的列。但是,当我在框中设置列时,JMP只会设置活动数据表中的列,而不会尊重数据表参数。有什么建议么?
这是错误行为的快速示例:
dt = New Table(“ Table 1”,Add Rows(0),保存时压缩文件(1),New Column(“ Column 1”,数字,“ Continuous”,Format(“ Best”,12),设置值( [])),新列(“第2列”,数值,“连续”,格式(“最佳”,12),设置值([])),新列(“第3列”,数值,“连续”,Format(“ Best”,12),Set Values([[]))); dtNew =新表(“表2”,添加行(0),保存时压缩文件(1),新列(“列4”,数值,“连续”,格式(“最佳”,12),设置值( [])),新列(“第5列”,数值,“连续”,格式(“最佳”,12),设置值([])),新列(“第6列”,数值,“连续”,Format(“ Best”,12),Set Values([[])));新窗口(“列重命名器”,h列表框(面板框(“源表”,SourceBox =列列表框(dt,全部)),面板框(“目标表”,DestBox =列列表框(dtnew,全部) ,),));结果是:
预期的结果是,在左列表中显示了第1,2,3列,因为这些是第一张表中的名称。相反,它两次显示第二个表(最后一个创建的表,也就是活动表)。
回复:col list box()不尊重数据表引用不能回答您的真实问题,但是可以(在Mac上为JMP 14.2):
dt = New Table( "Table 1",
Add Rows( 0 ),
Compress File When Saved( 1 ),
New Column( "Column 1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [] )
),
New Column( "Column 2",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [] )
),
New Column( "Column 3",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [] )
)
);
dtNew = New Table( "Table 2",
Add Rows( 0 ),
Compress File When Saved( 1 ),
New Column( "Column 4",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [] )
),
New Column( "Column 5",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [] )
),
New Column( "Column 6",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [] )
)
);
new window("Column renamer",
h list box(
Panel box("Source table",
SourceBox = Col List Box(DataTable( "Table 1"),All)
),
Panel box("Destination table",
DestBox = Col List Box(DataTable( "Table 2"),All),
),
)
);
回复:col list box()不尊重数据表引用嗨,伊恩,感谢您的帮助,但确实不能解决我的问题。这是我真正想做的一个更大的代码片段。因此,您从打开的表中选择了两个不同的表,并且当您选择另一个表时,其下面的列列表将填充所选表中的列:
Names default to here(1);
ListOfOpenTables = sort list(Get Data Table List());
ColumnWidth = 300;
new window("Column renamer",
h list box(
Panel box("Source table",
v list box(
FirstDT = List box(ListOfOpenTables, maxSelected(1), width(ColumnWidth),
dt = Data Table((FirstDT << get selected())[1]);
SourceBox << Set items(Data Table((FirstDT << get selected())[1]) << Get Column Names("String"));
),
SourceBox = Col List Box(,nlines(40), width(ColumnWidth),
OldCounter << set text(char(n items(SourceBox << get selected())) || " Columns selected");
dt << Select columns(SourceBox << get selected());
),
OldCounter = Text Box("")
)
),
Panel box("Destination table",
v list box(
SecondDT = List box(ListOfOpenTables, maxSelected(1), width(ColumnWidth),
dtnew = Data Table((SecondDT << get selected())[1]);
DestBox << Set items(Data Table((SecondDT << get selected())[1]) << Get Column Names("String"));
),
DestBox = Col List Box(,nlines(40), width(ColumnWidth),
NewCounter << set text(char(n items(DestBox << get selected())) || " Columns selected");
dtnew << Select columns(DestBox << get selected())
),
NewCounter = Text Box("")
)
),
Panel box("Actions",
v list box(
button box("Change column names",DoTheWork),
button box("Undo",Undo)
)
)
)
);回复:col list box()不尊重数据表引用对不起,保罗,我没有时间去了解您要做什么的细微差别。
但这是一个旧的代码片段,可能会使您更接近(不使用'ColListBox()'):
Names default to here(1);
ListOfOpenTables = sort list(Get Data Table List());
updateCLB =
Expr(
thisTable = (tlb << getSelected)[1];
CMD = Expr(cols = DataTable(tableTBD) << getColumnNames("String"));
SubstituteInto(CMD, Expr(tableTBD), Eval(thisTable));
CMD;
clb << setItems(cols);
);
clbAction =
Expr(
Speak("Column "||(clb << getSelected)[1]||" was selected.");
);
nw = NewWindow("Test",
tlb = ListBox(ListOfOpenTables, maxSelected(1), updateCLB),
clb = ListBox({"Pick a table above"}, maxSelected(1), clbAction)
);回复:col list box()不尊重数据表引用是的,使用标准列表框可以使它正常工作,但它看起来不像JMP通常使用的列选择对话框。而且它不显示数据表中的列分组。因此,我想用col列表框实现它:)回复:col list box()不尊重数据表引用明白了!如果愿意,可以使用'ColListBox()'做类似的事情:
Names default to here(1);
ListOfOpenTables = sort list(Get Data Table List());
updateCLB =
Expr(
Try(clb << delete);
thisTable = (tlb << getSelected)[1];
CMD = Expr(nw << Append(clb = ColListBox(DataTable(tableTBD), All, maxSelected(1), clbAction)));
SubstituteInto(CMD, Expr(tableTBD), Eval(thisTable));
CMD;
);
clbAction =
Expr(
Speak("Column "||(clb << getSelected)[1]||" was selected.");
);
nw = NewWindow("Test", tlb = ListBox(ListOfOpenTables, maxSelected(1), updateCLB));