大家好,
我正在运行 JMP Pro 16.1.0 并且需要一些 JSL 帮助。
我有一个通过导入 CSV 文件生成的数据表,具有以下结构(实际列数要大得多,但表保持这种结构):

我试图弄清楚如何正确地将结构更改为规格表的典型格式,如下所示:

最终,specs 数据表的列名将更改为 JMP 格式,即:“Column 1”n、“_LSL”n、“_Target”n 和“_USL”n。 每行将是具有相应值的规范。
我遇到的问题是如何使用 JSL 来自动执行此过程。 我尝试过拆分或堆栈的不同组合,但实际上都没有让我到达我想去的地方——至少在我使用它们的方式上没有。 我确信有一种简单的方法可以做到这一点,但我不知何故错过了它。
欢迎任何建议。
谢谢!,
DS
你好@Jeff_Perkinson ,
感谢您的快速回复,是的,这正是我希望开始工作的。
@jthi ,从Jeff的回复看来,如果你将它们分组到正确数量的系列中,那么只要列数据结构保持不变,那么它可以按照预期的方式堆叠它们并且列不需要都有相同的数据类型。 就我而言,这意味着第一列始终是文本列,后跟三个数字列。
谢谢您的帮助!,
DS
这是一个使用 Tables->Stack 的多系列堆栈。
从这张表开始。

并使用 Tables->Stack 和 Multiple Series Stack 选项。

会给你这张桌子。

只需删除标签列即可。
这是我从增强日志中获得的 JSL。
// Stack data table
// → Data Table( "untitled 13" )
Data Table( "untitled 11" ) << Stack(
columns(
:c00000 01, :c00000 02, :c00000 03, :c00000 04, :c00000 05, :c00000 06,
:c00000 07, :c00000 08, :c00000 09, :c00000 10, :c00000 11, :c00000 12
),
Source Label Column( "Label" ),
Stacked Data Column( "Data" ),
Number of Series( 4 )
);
// Delete columns
Data Table( "untitled 13" ) << Delete Columns(
:Label, :Label 2, :Label 3, :Label 4
);
我认为堆栈在使用多系列堆栈时应该能够做到这一点。 所有列的数据类型应相同(至少在此方法中)



然后删除标签列。 更改堆栈平台中的选项可能会使其更加清晰,但我没有使用多系列堆栈,但它非常强大。 我会标记@Jeff_Perkinson在这里,因为我见过他多次使用它,并且可能有比我更好的设置。
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(1),
New Column("Column 1", Character, "Nominal", Set Values({"x1"})),
New Column("Column 2", Character, "Nominal", Set Values({"1"})),
New Column("Column 3", Character, "Nominal", Set Values({"1.1"})),
New Column("Column 4", Character, "Nominal", Set Values({"1.11"})),
New Column("Column 5", Character, "Nominal", Set Values({"x2"})),
New Column("Column 6", Character, "Nominal", Set Values({"2"})),
New Column("Column 7", Character, "Nominal", Set Values({"2.2"})),
New Column("Column 8", Character, "Nominal", Set Values({"2.22"})),
New Column("Column 9", Character, "Nominal", Set Values({"x3"})),
New Column("Column 10", Character, "Nominal", Set Values({"3"})),
New Column("Column 11", Character, "Nominal", Set Values({"3.3"})),
New Column("Column 12", Character, "Nominal", Set Values({"3.33"}))
);
// data types must be same for stack, so you might have to script it
dt_stacked = dt << Stack(
columns(
:Column 1, :Column 2, :Column 3, :Column 4, :Column 5, :Column 6, :Column 7,
:Column 8, :Column 9, :Column 10, :Column 11, :Column 12
),
Source Label Column("Label"),
Stacked Data Column("Data"),
Stack By Row(0),
Number of Series(4),
Contiguous
);
For Each({col_name}, dt_stacked << get column names("String"),
If(Contains(col_name, "Label"),
dt_stacked << Delete Columns(col_name)
);
);