Re: 2 つの関連する列に基づく GUI コンボ ボックス2 番目のコンボ ボックスのオプションを制限するには、関数 (またはスクリプト) を追加する必要があります。 以下の1つのオプション(JMP14で動作するはずです)
Names Default To Here(1);
v1 = "";
v2 = "";
dt = Open("$DOWNLOADS/JMP_Question.xlsx", Worksheets("Sheet1"), invisible);
Summarize(dt, uniqvals = by(:Column 1));
aa_options = Associative Array();
For(i = 1, i <= N Items(uniqvals), i++,
col1_idx = dt << Get Rows Where(:Column 1 == uniqvals[i]);
col2_vals = dt[col1_idx, "Column 2"];
aa_options[uniqvals[i]] = col2_vals;
);
nw = New Window("Set the Value",
Lineup Box(N Col(2),
Text Box("Col1"),
cb1 = Combo Box(uniqvals, << set function(function({this},
cb2_vals = aa_options[(this << get selected)];
cb2 << Set Items(cb2_vals);
)), << Set(1)
),
Text Box("Col2"),
cb2 = Combo Box(aa_options[uniqvals[1]])
),
H List Box(
Button Box("OK",
v1 = cb1 << get selected;
v2 = cb2 << get selected;
nw << close window;
show(v1, v2);
),
Button Box("Cancel", nw << close window)
)
);
Re: 2 つの関連する列に基づく GUI コンボ ボックスありがとうジャルモ! あなたはそれを簡単に見せました。 
出来た。
Re: 2 つの関連する列に基づく GUI コンボ ボックスジャーモさん、こんばんは。
ダイアログ ボックスで私が抱えていたもう 1 つの問題は、入力としてリストを取得することです。
次のコードを使用する場合。
Names Default To Here(1);
v1 = "";
v2 = "";
dt = Open("JMP_Question.xlsx", Worksheets("Sheet1"), invisible);
Summarize(dt, uniqvals = by(:Column 1));
aa_options = Associative Array();
For(i = 1, i <= N Items(uniqvals), i++,
col1_idx = dt << Get Rows Where(:Column 1 == uniqvals[i]);
col2_vals = dt[col1_idx, "Column 2"];
aa_options[uniqvals[i]] = col2_vals;
);
nw = New Window("Set the Value",
Lineup Box(N Col(2),
Text Box("Col1"),
cb1 = Combo Box(
uniqvals,
<<SET function=""></SET>
リストを入力として取っていません。 私は何か間違ったことをしていますか?
ありがとう!
Re: 2 つの関連する列に基づく GUI コンボ ボックスJMP でリストをテキスト ボックスに入れることができたとしても (理由はわかりませんが、エラーが発生するはずだと思います)、それは文字列であるため (JMP ではほとんどの場合変換が実行されます)、インデックスを使用して直接参照することはできません。
単語を使用してリストに分割するか(括弧などの余分な文字を削除するために置換することもできます)、または Parse() リストに分割できます。
Names Default To Here(1);
nw = new window("",
tb = Text Edit Box({"list1", "list2", "list3"}),
);
tb_txt = tb << get text;
show(tb_txt);
show(type(tb_txt));
show(Parse(tb << get text));
show(type(Parse(tb << get text)));Re: 2 つの関連する列に基づく GUI コンボ ボックスこんにちは、ジャーモさん
このソリューションを 3 つの列に適用しようとすると、うまくいきます。 ただし、最初の列と 2 番目の列に基づいて一意の選択を作成することはできません。
Names Default To Here(1);
v1 = "";
v2 = "";
v3 = "";
dt = Open("JMP_Question.xlsx", Worksheets("Sheet1"), invisible);
Summarize(dt, uniqvals_1 = by(:Column 1));
Summarize(dt, uniqvals_2 = by(:Column 2));
Summarize(dt, uniqvals_3 = by(:Column 2,:Column 3));
aa_options = Associative Array();
For(i = 1, i <= N Items(uniqvals_1), i++,
col1_idx = dt << Get Rows Where(:Column 1 == uniqvals_1[i]);
col2_vals = dt[col1_idx, "Column 2"];
aa_options[uniqvals_1[i]] = col2_vals;
);
ab_options = Associative Array();
For(i = 1, i <= N Items(uniqvals_2), i++,
col2_idx = dt << Get Rows Where(:Column 2 == uniqvals_2[i]);
col3_vals = dt[col2_idx, "Column 3"];
ab_options[uniqvals_2[i]] = col3_vals;
);
/*
ac_options = Associative Array();
For(i = 1, i <= N Items(uniqvals_1), i++,
col1_idx = dt << Get Rows Where(:Column 1 == uniqvals_1[i]);
col2_vals = dt[col1_idx, "Column 2"];
For(j=1, j<=N Items(uniqvals_2),j++
col2_idx = dt << Get Rows Where(:Column 2 == uniqvals_2[j]);
col3_vals = dt[col2_idx, "Column 3"];
ac_options[uniqvals_2[j]] = col3_vals;
);
);
*/
print(ac_options);
nw = New Window("Set the Value",
Lineup Box(N Col(2),
Text Box("Col1"),
cb1 = Combo Box(uniqvals_1, << set function(function({this},
cb2_vals = aa_options[(this << get selected)];
cb2 << Set Items(cb2_vals);
)), << Set(1)
),
Text Box("Col2"),
cb2 = Combo Box(uniqvals_2, << set function(function({this},
cb3_vals = ab_options[(this << get selected)];
cb3 << Set Items(cb3_vals);
)), << Set(1)
),
Text Box("Col3"),
cb3 = Combo Box(ab_options[uniqvals_2[1]])
),
H List Box(
Button Box("OK",
v1 = cb1 << get selected;
v2 = cb2 << get selected;
v3 = cb3 << get selected;
nw << close window;
show(v1, v2, v3);
),
Button Box("Cancel", nw << close window)
)
);上記のコードは機能します。 ただし、添付の画像を見ると、Col2 と Col3 に固有のリストを作成できません。
おそらく私が見逃している簡単な解決策があるでしょう。
ありがとう!
Re: 2 つの関連する列に基づく GUI コンボ ボックス:Column 1 と :Column 2 を組み合わせた新しい列を作成し、それをキーに使用できます。
2 つの関連する列に基づく GUI コンボ ボックスこんにちは、
ファイル内に 2 つの列がある場合、2 つの列を個別に使用してコンボ ボックスを作成できます (添付の JSL ファイルを参照)。 ただし、私が本当に望んでいるのは、最初のオプション (たとえば「a」) を選択すると、2 番目のボックスのオプションが「a1」、「a2」、「a3」のみに制限されることです。 添付のExcelファイルをご覧ください。
助けていただければ幸いです。
v1 = "m";
v2 = "n";
dt = Open("JMP_Question.xlsx", Worksheets("Sheet1"), invisible);
subDt1 = dt << Subset(Columns(:Column 1), invisible);
Summarize(col1_unique_vals = by(Column 1));
subDt2 = dt << Subset(Columns(:Column 2), invisible);
Summarize(col2_unique_vals = by(Column 2));
win = New Window("Set the Value",
H List Box(Text Box("Col1"), combo_box1 = Combo Box(col1_unique_vals)),
H List Box(Text Box("Col2"), combo_box2 = Combo Box(col2_unique_vals)),
H List Box(
Button Box("OK",
v1 = combo_box1 << get selected;
v2 = combo_box2 << get selected;
win << close window;
),
//a cancel button that closes the window and doesn't store store the results
Button Box("Cancel", win << close window)
)
);
JMP バージョン - JMP Pro 14
自動化とスクリプト作成品質およびプロセスエンジニアリング