用於選擇不同觀測值的動態對話框我有以下數據。 我想創建一個對話框,該對話框將顯示遊戲欄中可用的不同類型的遊戲,並為用戶提供選擇每個遊戲類型的選項。 一旦用戶為每個遊戲選擇了類型並單擊“確定”,那麼它應該更新原始表,添加新列,其中包含每個遊戲的遊戲類型。 此外,如果用戶為特定遊戲類型選擇了可能的遊戲,則該遊戲應該從對話框中的遊戲列表中隱藏,以避免重複。
下面是我的原始表和最終表。 交互式對話框應如附圖所示,用戶可以在其中拖放適用於相應遊戲類型的遊戲選項。 只有在選擇了所有遊戲後,“確定”按鈕才會激活。
請幫我創建相同的 .jsl 腳本。
原表:
| 姓名 | 遊戲 |
| A | 足球 |
| A | 棋 |
| A | 羽毛球 |
| 乙 | 足球 |
| C | 棋 |
| 乙 | 乒乓球 |
| D | 沒有什麼 |
決賽桌:
| 姓名 | 遊戲 | 遊戲類型 |
| A | 足球 | 戶外的 |
| A | 棋 | 室內的 |
| A | 羽毛球 | 室內的 |
| 乙 | 足球 | 戶外的 |
| C | 棋 | 室內的 |
| 乙 | 乒乓球 | 室內的 |
| D | 沒有什麼 | 不適用 |
謝謝 :) 
回复:用於選擇不同觀測值的動態對話框特納克斯@gzmorgan0
感謝你的幫助。
我正在使用 JMP 14。回复:用於選擇不同觀測值的動態對話框@拉賈特,
附件是修改後的腳本。 注意事項:
- 使用 ComboBox 作為類別選項列表,由腳本內部的列表設置。
- 通過從源列表中選擇、組合框中的當前類別並按“分配”按鈕來進行分配
- 作業列為遊戲名稱 > 類別
- 添加了更新按鈕,以便可以增量更新表
- 僅為尚未分配遊戲類型的遊戲創建源列表
- 必須更改刪除和寫入表的操作。 現在 lb1(分配列錶框)中的項目在單個字符串中包含 2 條信息。 Word(n,string,delimiter) 函數用於提取相關信息。
屏幕截圖顯示已完成一項分配。 對於此視圖,如果用戶按分配,羽毛球和足球將被分配為室外。
該接口減少了顯示框的變量數量。創建有用的界面需要了解應用程序、需求和用法,了解一些基礎知識或找到接近您想要的示例代碼並理解它。 請注意,此腳本有許多替代方案。祝你好運!

JSL 用於對話框佈局。 附上完整腳本。
//--Dialog
usr = New Window("Using List Boxes", <<MODAL></MODAL>回复:用於選擇不同觀測值的動態對話框@拉賈特,
您沒有提及您正在使用哪個 JMP 版本。如果是 JMP 14,請從 JMP 主菜單中選擇幫助 > 書籍 > JMP 腳本編寫指南。 這是一本精裝書的 PDF 版本。 第 11 章,從第 517 頁開始,“構造自定義窗口”部分開始。這是一個非常好的學習來源。
也幫助 > 腳本索引 >在頂部灰色按鈕上,按下並選擇展示盒。從左側選擇一個顯示框構造函數,然後在右側查看語法,然後您可以運行1 個或多個簡單示例腳本,或者復制並粘貼並製作您自己的腳本,以了解每個構造函數的工作原理。我建議你查找:按鈕盒,列錶框哪些是構造函數。 面板盒,排隊框,列錶框(HListBox、VListBox)是用於排列對話框佈局的容器。
要真正學習如何編寫腳本,您確實需要了解工具,並且這個學習過程可能需要時間。然而,許多腳本編寫者通過獲取現有腳本、閱讀、運行、修改以滿足他們的需求來學習,
既然你說這需要很多變量,我假設你需要 3 個以上的類別(室內、室外、無)。 正如我在上一篇文章中所說,有很多方法可以實現這一點,我使用了複製粘貼代碼。如果您有很多類別,我會使用以下提供的示例修改我的腳本@pmroz 。 我將使用組合框從類別列表中進行選擇,並且僅使用一個按鈕框(分配)和一個分配框。如果我有時間,我會修改我的腳本並附上它。
JMP 到 JMP 腳本編寫,2和JSL Companion,JMP 腳本語言的應用,第二版您可能會發現另外兩本書對於學習 JSL 很有用。
回复:用於選擇不同觀測值的動態對話框謝謝@gzmorgan0
我正在尋找這個解決方案。
我正在嘗試理解代碼。 看來我們必須創建這麼多變量。 您能給我推薦任何好的視頻教程系列(最好)或任何我可以參考的書籍來學習使用 jsl 創建交互式對話框嗎? 我剛開始創建這些對話框。
謝謝 :)
回复:用於選擇不同觀測值的動態對話框@拉賈特,
大多數用於構建自定義對話框的 JMP 腳本語言、JSL、對象和函數都以表列為目標。 考慮 JMP 內置對話框窗口正在請求列。 有些對象可用於自定義選擇,但這些“值”對象通常需要更多編程。例如,一個 ColListBox 對像有一個內置的拖放界面:可以將一個列名拖到另一個 ColListBox 中,並且列名是唯一的。
JSL 確實提供了 ListBox() 對象,但是,現在腳本編寫人員的工作是確保唯一性。 例如,根據您對任務進行編碼的方式,您必須管理“足球”只有一種分類,並且名稱僅使用一次。
一種方法是不使用對話框,而是創建獨特遊戲和遊戲類型的表摘要,讓用戶更新此縮短的表,然後更新源表。 此方法類似於舊的數據庫更新接口。
我附加了一個非常簡單且不太優雅(重複的暴力代碼)腳本來完成所描述的任務。因為你還沒有讀過這本書,所以我保持簡單。腳本界麵包括一個刪除按鈕,以防意外選擇了錯誤的遊戲類型。我沒有創建聯合函數(因此遊戲列表沒有重複項)以及確保遊戲不被分類為室內和室外的函數,而是構建了在選擇類別後從源列表中刪除遊戲的代碼。
您應該閱讀有關關聯數組、鍵控列表、ListBox、ButtonBox 和 Set Function() 的內容。
下面是對話框和腳本的對話框部分的屏幕截圖。 附上完整的腳本。請注意,這可以使用 DataFilterBox 來完成,但 ListBox() 更容易使用。 順便說一句,這是在 JMP13 和 14 上進行測試的。

//--Dialog
usr = New Window("Using List Boxes", <<MODAL></MODAL>回复:用於選擇不同觀測值的動態對話框你好@pmroz
感謝回复。
在我的實際數據集中,我有 1000 個遊戲,其中有 25 個獨特的遊戲,而且我只有三個類別:1.室內 2.室外 3.不適用。 通過這種方法,我必須為每 1000 個遊戲選擇遊戲類型。 我也嘗試過獨特的遊戲,但沒有成功。
我們可以有一個窗口只顯示遊戲的獨特價值嗎? 此外,它應該允許遊戲的多重選擇,然後為所有多重選擇的遊戲選擇遊戲類型,因為如果獨特遊戲的數量增加,為遊戲的每個獨特值選擇遊戲類型是乏味的。回复:用於選擇不同觀測值的動態對話框這是一個使用帶有 col 框的表格框的解決方案。根據您的遊戲類型進行調整。
dt = New Table( "Games", Add Rows( 7 ),
New Column( "Name", Character, "Nominal",
Set Values( {"A", "A", "A", "B", "C", "B", "D"} ) ),
New Column( "Game", Character( 16 ), "Nominal", Set Values(
{"Football", "chess", "Badminton", "Football", "Chess", "Table Tennis", "Nothing"} ) ),
new column("Game Type", Character, "Nominal")
);
game_list = dt:game << get values;
ngames = nitems(game_list);
selected_type = {};
type_list = {"No choice made", "Outdoor", "Indoor", "Nothing"};
game_type_cb = {};
game_type_colb = col box("Game Type");
for (i = 1, i <= ngames, i++,
selected_type[i] = "No choice made";
game_type_cb[i] = combo box(type_list);
game_type_colb << append(game_type_cb[i]);
);
nw = new window("Game Type Setting",
panel box("Select game type for each game",
tb = table box(
string col box("Game", game_list),
game_type_colb
),
),
panel box("Actions",
hlistbox(
okb = button box("OK",
for (i = 1, i <= ngames, i++,
selected_type[i] = game_type_cb[i] << get selected();
dt:game type[i] = selected_type[i];
);
show(selected_type);
nw << close window;
),
canb = button box("Cancel",
nw << close window;
),
)
)
);