Names Default To Here(1);
// Function to recode a selected column
recode_column = Function({dataTable, columnToRecode, newColumnName},
// Check if column exists
If(Column(dataTable, columnToRecode) != {},
// Create a mapping for recoding
aa_recode = Associative Array();
For(i = 1, i <= N Row(dataTable), i++,
aa_recode[Column(dataTable, columnToRecode) << Get Value(i)] = Column(dataTable, columnToRecode) << Get Value(i);
);
dataTable << New Column(newColumnName, Character, Nominal, << Set Each Value(
aa_recode[Column(dataTable, columnToRecode)]
));
cols = {};
For(i = 1, i <= N Col(dataTable), i++,
cols[N Items(cols) + 1] = Column(dataTable, i) << Get Name
);
recodeColListBox << Set Items(cols);
colorColListBox << Set Items(cols); // Refresh heatmap plotting list
Show Message("Column recoded and new column added: " || newColumnName);
,
Show Message("Selected column does not exist.")
);
);
// Function to plot the heatmap
PlotHeatmap = Function({dataTable, colorColumnName},
If(colorColumnName != "",
Graph Builder(
Size(1500, 800),
Show Control Panel(0),
Data Table(dataTable),
Variables(
X(:x_Location),
Y(:y_Location),
Color(Column(dataTable, colorColumnName))
),
Elements(Heatmap(X, Y, Legend(4)))
)
,
Show Message("Please select a column for color.")
)
);
list = {};
For(i = 1, i <= N Table(), i++,
list[i] = Data Table(i) << Get Name
);
// Create the window
win = New Window("JMP ADDIN",
H List Box(
V List Box(
Panel Box("Choose a source data table",
dtListBox = List Box(list, max selected(1))
)
),
Button Box("Get Columns",
chosen = Data Table((dtListBox << Get Selected)[1]);
If(chosen != {},
cols = {};
For(i = 1, i <= N Col(chosen), i++,
cols[N Items(cols) + 1] = Column(chosen, i) << Get Name
);
recodeColListBox << Set Items(cols);
colorColListBox << Set Items(cols); // Refresh for heatmap plotting
,
Show Message("Please select a valid data table.")
);
),
// Panel for selecting columns to recode
V List Box(
Panel Box("Select Columns for Recode",
recodeColListBox = List Box("")
)
),
// Button to recode a column
Button Box("Recode Column",
chosen = Data Table((dtListBox << Get Selected)[1]);
recode_col = recodeColListBox << Get Selected;
If(recode_col != "",
new_col_name = "Recode_" || recode_col; // Define new column name
recode_column(chosen, recode_col, new_col_name);
// Refresh column list after recoding
cols = {};
For(i = 1, i <= N Col(chosen), i++,
cols[N Items(cols) + 1] = Column(chosen, i) << Get Name
);
recodeColListBox << Set Items(cols);
colorColListBox << Set Items(cols); // Ensure the new column is available for heatmap plotting
,
Show Message("Please select a column to recode.")
);
),
// Panel for selecting columns to plot heatmap
V List Box(
Panel Box("Select Columns for Heatmap",
colorColListBox = List Box("")
)
),
// Button to plot the heatmap
Button Box("Plot Heatmap",
selectedColorColumn = colorColListBox << Get Selected;
If(selectedColorColumn != "",
chosen = Data Table((dtListBox << Get Selected)[1]);
If(chosen != {},
PlotHeatmap(chosen, selectedColorColumn);
,
Show Message("Selected data table is invalid.")
);
,
Show Message("Please select a column for color.")
);
)
)
);ワークフロー: テーブルを選択 --> 再コード化する列を選択 --> 列を再コード化 (文字列と数値列の両方の再コード化を可能にするにはヘルプが必要です) --> 列リストを更新 --> 1 つまたは複数の列を選択 --> ヒート マップをプロット
助けが必要です 1) 数値データ型の列のみを再コード化できる現在のスクリプトをデバッグします
2) 再コード化に文字タイプの列の選択を含めるにはどうすればよいでしょうか?
3) jmp(columns--> Recode) によって、recode ui プリセットを ui の一部として開くことはできますか?
このコードは、何らかの LLM によって作成されたように見えるため、小さな間違いや、JMP にはない関数の使用が多数あります。正しい結果とそれがどこから来ているのかの説明も含まれているサンプル テーブルを提供していただけますか。

これは例です。「ロット番号」を再コード化してグループ化し、「再コード化された列」を使用してヒートマップをプロットします。

例2: テスターをグループ化し、再コード化された列を使用してヒートマップをプロットします。
これが役に立つことを願います
ありがとう
グループ化は何に基づいて行われますか? 連続した行ですか?
テスター3がどのようにして2に変わるのか、またこの2つの列からどのようなヒートマップを見ているのか、まだよく分かりません。




再コーディングに使用するルールは何ですか? 例から判断すると、再コーディングは単に行 1 と 2 を取得してグループ化し、次に行 3 と 4 を取得してグループ化する、というように行われ、最初のグループ化には値 1 が与えられ、2 番目のグループ化には値 2 が与えられる、というようになります。
この場合、再コード化された列の式は単純に
Ceiling(Row() / 2)
これがあなたが探しているものですか?これはlot_noやtesterの値に依存せず、行番号のみに依存するため、文字データと数値データの両方で機能します。
ユーザーが recode プラットフォームを自由に使用できるようにしたい場合、これは思ったほど簡単ではないかもしれません。
スクリプトの仕様を再検討する必要があると思います。必要な仕様、JMP のプラットフォームを使用してユーザーが実行できる内容、再コード化を使用して新しい列を選択した後にスクリプトを実行できるかどうかなどです。
1 つの列リストで十分な場合もあります。ユーザーは 2 つのボタンを使用して、選択した列を再コード化するかプロットするかを決定できます。

dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
For Each( {col}, {:age, :height, :weight}, col << Set Modeling Type( "Nominal" ) );
New Window( "simple GUI", << Type("Dialog"),
lb = Filter Col Selector( width( 150 ) ),
Button Box( "recode",
cols = lb << get selected();
dt << select columns( cols );
dt << Recode;
),
Button Box( "plot",
cols = lb << get selected();
If( N Items( cols) >= 2 ,
xcol = cols[1];
ycol = cols[2];
Graph Builder( Variables( X(Eval(xcol) ), Y( Eval(ycol) ) ), Elements( Heatmap( X, Y ) ) );
,
Caption( "select 2 columns" )
);
)
);わかりました、ありがとうございます。列を再コード化し、その列を使用してグラフをプロットする方法はありますか? または、新しい GUI を開いてプロットできますか?
次の 2 つのステップを組み合わせたワークフローを設定する理由を説明してください。
- 再コード
- プロット
再コード化は非常に一般的なステップですが、ほとんどの場合、データ分析とは別のデータキュレーションワークフローの一部です。なぜ 2 つのステップを組み合わせるのですか?
ユーザーは、列をプロットする前に毎回列を再コード化する必要がありますか。
ユーザー A が列を再コード化した後、ユーザー B は再コード化した列を取得でき、再度再コード化する必要はありません。または、ユーザー A の後に消える「仮想列」 [変換列] を用意して、ユーザー B が独自の再コード化を定義できるようにすることをお勧めします。
生成したいプロットの例を挙げていただけますか。常に同じタイプのプロットですか? ヒートマップですか? どの列をプロットする必要がありますか?
元の列と再コード化された列を比較しますか? 3 番目の列と再コード化された列を比較しますか? 2 つの列を再コード化してプロットしますか?