Col 목록 상자()는 데이터 테이블 참조를 존중하지 않습니다.JMP 14.1 사용:
사람들이 두 개의 데이터 테이블을 선택한 다음 두 개의 열 목록 상자에 해당 데이터 테이블의 열을 표시하기를 원합니다. 그러나 상자에 열을 설정하면 JMP는 활성 데이터 테이블의 열만 설정하고 데이터 테이블 인수를 고려하지 않습니다. 어떤 제안?
다음은 잘못된 동작의 간단한 예입니다.
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(dt,All)
),
Panel box("Destination table",
DestBox = Col List Box(dtnew,All),
),
)
);이 결과는 다음과 같습니다.

예상되는 결과는 첫 번째 테이블의 이름이기 때문에 왼쪽 목록에 열 1,2,3이 표시된다는 것입니다. 대신 두 번째 테이블(마지막으로 생성된 활성 테이블)이 두 번 표시됩니다.
Re: Col 목록 상자()가 데이터 테이블 참조를 존중하지 않습니다.이해했다! 원하는 경우 '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));
Re: Col 목록 상자()가 데이터 테이블 참조를 존중하지 않습니다.예, 표준 목록 상자를 사용하여 작동하게 되었지만 JMP가 일반적으로 사용하는 열 선택 대화 상자처럼 보이지 않습니다. 그리고 데이터 테이블의 열 그룹화를 표시하지 않습니다. 따라서 col 목록 상자를 사용하여 구현하고 싶습니다.
Re: Col 목록 상자()가 데이터 테이블 참조를 존중하지 않습니다.죄송합니다 Paul, 나는 당신이 하려는 일의 미묘한 차이를 이해할 시간이 없었습니다.
그러나 여기에 더 가까이 다가갈 수 있는 오래된 코드 조각이 있습니다('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)
);Re: Col 목록 상자()가 데이터 테이블 참조를 존중하지 않습니다.안녕하세요 Ian, 도와주셔서 감사합니다. 하지만 실제로 문제가 해결되지는 않습니다. 여기에 내가 실제로 하려고 하는 것의 더 큰 코드 조각이 있습니다. 따라서 열려 있는 테이블에서 두 개의 다른 테이블을 선택하고 다른 테이블을 선택하면 아래의 열 목록이 선택한 테이블의 열로 채워집니다.
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)
)
)
)
);Re: Col 목록 상자()가 데이터 테이블 참조를 존중하지 않습니다.실제 질문에 대답하지는 않지만 작동합니다(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),
),
)
);