用于转换选定列的 JSL 脚本您好,在 JMP 14 中,我希望允许用户选择非特定列,例如 X、Y、Z,然后运行 JSL 脚本,该脚本生成具有每列差异的新列,即 XY、XZ、YZ。该脚本不需要计算 YX 或 ZX,因为这些差异已经计算出来。任何帮助表示赞赏,谢谢!
回复:用于转换选定列的 JSL 脚本您可以使用 Match() 函数而不是 If() 函数。 更好的是,如果您用单选按钮替换复选框,则可以使用 Choose() 函数。 (似乎算法的选择是排他性的。)
回复:用于转换选定列的 JSL 脚本我能够想出这个脚本。不确定如何将转换缩短为“if”语句。
@ian_jmp
NamesDefaultToHere(1);
// Make a table to use
nr = 100; // Number of rows
nc = 10; // Number of columns
dt = AsTable(J(nr, nc, RandomNormal()));
dt << setName("Example Data");
// Make a UI to allow selection of columns from the current data table
dt = CurrentDataTable();
nw = NewWindow("New Column Transforms",
TextBox("Select all transforms to perform", << fontColor("Blue")),
VListBox(
cb=CheckBox({"Plus","Minus","Times","DivideBy"},
Print(
"Selected: " || Concat Items(cb <<GETSELECTED></GETSELECTED>回复:用于转换选定列的 JSL 脚本非常感谢伊恩!我很欣赏您的快速回复。这就是我一直在寻找的。
如果我想让事情变得更奇特怎么办?假设我希望允许用户选择列(像以前一样),然后还能够选择以下转换中的 1 个或多个:加、减、乘、除。然后,该脚本将根据所选的转换创建新列。谢谢 !
回复:用于转换选定列的 JSL 脚本这是一种方法(使用公式):
NamesDefaultToHere(1);
// Make a table to use
nr = 100; // Number of rows
nc = 10; // Number of columns
dt = AsTable(J(nr, nc, RandomNormal()));
dt << setName("Example Data");
// Make a UI to allow selection of columns from the current data table
dt = CurrentDataTable();
nw = NewWindow("Difference of Columns",
TextBox("Select columns:", << fontColor("Blue")),
clb = ColListBox(all, numeric),
LineUpBox(NCol(2),
ButtonBox("OK", OKscript),
ButtonBox("Cancel", nw << closeWindow)
);
);
nw << setWindowSize(300, 300);
// This script runs if the user hits 'OK'
OKScript =
Expr(
nw << closeWindow;
// Get which columns were selected
colList = clb << getSelected;
// Define a formula column for each pairwise difference
for(c1=2, c1<=NItems(colList), c1++,
for(c2=1, c2<C1></C1>
使用“帮助 > 书籍 > 脚本指南”和“帮助 > 脚本索引”来了解其工作原理。