如何制作 JMP 脚本来为用户输入创建一个新窗口,根据另一个列为列分配值你好呀,
我被困在我的 JMP 脚本的特定部分,希望能从不同的角度得到一些帮助。
我有一个看起来像这样的数据集,但有更多的类别,每个类别都有更长的名称。

我想根据给定的列创建另一个带有数值的列。 该产品需要完全自动化,带有一个弹出窗口,其中列出了每个类别,并带有数字编辑框,用户可以输入与类别对应的数值。 例如:
弹出窗口框:弹出窗口框中所有提示的新窗口。
输入对应于 A 的值: ___1___ 输入对应于 B 的值: ___2___ 输入对应于 C 的值: ___3___ 输入对应于 D 的值: ___4___ 输入对应于 E 的值: ___5___ |
生成的数据表应如下所示:

下面是我现在拥有的 JMP 脚本。 我还将 JMP 文件上传到了这篇文章。 我需要帮助的是红色文字以下。 我无法根据用户输入并对应于列表中的第 i 个唯一类别,在 for 循环中分配第 i 个值, unique_char , 到初始化数字列表中的第 i 个位置,数字列表,稍后将在下一个 for 循环中用于创建列 2(在下面的 JMP 脚本末尾)。
dt = Current Data Table();
//get the unique character variable list
Names Default To Here( 1 );
col9 = Column(dt, "Column 1");
unique_char = Associative Array(col9) << get keys; // unique_char = {"A", "B", "C", "D", "E"}
//get n items in character variable list
nuniquechar = N Items(unique_char); //will be 5, if categories are A, B, C, D, E
//initalize number list
num_list = {};
//create new window to create multiple number edit boxes
nw = New Window( "Set Values",
<<MODAL> // HELP:
// name a numeric variable on each iteration that will be the holder of a numeric edit box
// put the resulting ith entry into the num_list
num_list[i] = number edit box(),
// number box default is null/missing. If no input, place a missing value in the num_list
)
);<BR /><BR />// TO DO: <BR />// Create new column assigning the num_list values to <BR />// the corresponding rows based the unique character value. <BR />// Pseudo-code: <BR />// for(i in 1:nuniquechar)<BR />// if :column 1 = unique_char[i], num_list[i]<BR />//<BR />//</MODAL>这样做的结果将是使用以下条件逻辑根据第 1 列的类别制作第 2 列的自动化和用户友好版本。

数据表回复:如何制作 JMP 脚本来为用户输入创建一个新窗口,根据另一个列为列分配值我正在使用带有数字编辑框的 << Set Function 来获取 unique_aa 关联数组的值。 然后在关闭模态窗口后使用该关联数组构建所需的公式列。
Names Default To Here(1);
dt = Current Data Table();
//get the unique character variable list
col9 = Column(dt, "Column 1");
unique_char = Associative Array(col9) << get keys;
nuniquechar = N Items(unique_char); //will be 5, if categories are A, B, C, D, E
unique_aa = Associative Array(unique_char, Repeat({.}, nuniquechar)); //repeat to initialize values as missing
//create new window to create multiple number edit boxes
vlbExpr = V List Box();
For(i = 1, i <= nuniquechar, i++,
Insert Into(vlbExpr, Text Box("Number for " || Char(unique_char[i]) || ":")); //i.e. "Number for A:"
Eval(
Eval Expr(Insert Into(vlbExpr, Number Edit Box(., <<SET function=""></SET>
有关 Eval(EvalExpr()) 的信息,请参阅使用 Eval Insert、Eval Expr、Parse 和 Substitute 将一个表达式插入到另一个表达式中. 如果你想有公式
回复:如何制作 JMP 脚本来为用户输入创建一个新窗口,根据另一个列为列分配值这是我放在一起的一个小脚本 - 不是您可能想要一个可选的选择器来使新列成为数字(在这里我只是将其保留为字符)。
您必须输入一个新的列名,并且如果新名称当前存在于数据表中,则检查不会运行(我知道 JMP 不会覆盖列,但它仍然可能令人困惑)。
/* recode */
self = New Namespace();
Show( self << Get Name );
self:table = Current Data Table();
self:column = Insert( {}, self:table << Get Selected Columns );
self:column = self:column[1] << Get Name;
Show( self:column );
self:values = Associative Array( Column( self:table, self:column ) ) << Get Keys;
self:string list = {};
For( i = 1, i <= N Items( self:values ), i++,
Insert Into( self:string list, Char( i ) )
);
Eval( Eval Expr(
win = New Window( "Set Values",
<<MODAL></MODAL>回复:如何制作 JMP 脚本来为用户输入创建一个新窗口,根据另一个列为列分配值你考虑过列 > 重新编码平台?可能是一个很好的低技术方式来做你想做的事。
回复:如何制作 JMP 脚本来为用户输入创建一个新窗口,根据另一个列为列分配值当然 - 这是我在陷入困境之前考虑过的事情。 但是我想为不太了解JMP界面的人提供一个应用程序。