大家好,
我正在運行 JMP Pro 16.1.0 並且需要一些 JSL 幫助。
我有一個透過匯入 CSV 檔案產生的資料表,其結構如下(實際列數要大得多,但表保持此結構):

我試圖找出如何正確地將結構更改為規格表的典型格式,如下所示:

最終,列名稱將變更為規格資料表的 JMP 格式,即:「Column 1」n、「_LSL」n、「_Target」n 和「_USL」n。 每行都是一個具有對應值的規格。
我遇到的問題是如何使用 JSL 來實現此流程的自動化。 我嘗試過 Split 或 Stack 的不同組合,但實際上都沒有達到我想要的效果——至少在我使用它們的方式上沒有。 我確信有一種簡單的方法可以做到這一點,但我不知何故錯過了它。
歡迎任何建議。
謝謝!,
DS
你好@傑夫·珀金森,
感謝您的快速回复,是的,這正是我希望開始工作的地方。
@jthi ,從Jeff的回應看來,如果將它們分組為正確數量的系列,那麼只要列資料結構保持不變,就可以按照預期的方式堆疊它們,並且列不需要全部具有相同的資料類型。 對於我的情況來說,這意味著第一列始終是文字列,後面跟著三個數字列。
謝謝您的幫忙!,
DS
這是使用“表”->“堆疊”的多系列堆疊。
從這張表開始。

並使用“表”->“堆疊”和“多系列堆疊”選項。

會給你這張桌子。

只需刪除標籤列即可。
這是我從增強日誌中獲得的 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
);
我認為當使用多系列堆疊時堆疊應該能夠做到這一點。 所有列的資料類型應該相同(至少在這個方法中)



然後刪除標籤列。 更改堆疊平台中的選項可能會更清楚,但我沒有使用多系列堆疊,但它非常強大。 我來標記@傑夫·珀金森在這裡,因為我見過他多次使用它,並且可能有比我更好的設置。
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)
);
);