複数のユニットについて、2つの温度のデータセットを結合したデータテーブルがあります。各ユニットは2つの温度で20回以上のテストを受けています。
テーブル「Data_Table」に示すように、temp2 - temp1 間のデルタを計算するデルタ テーブルを各ユニットに対して生成する必要があります。
次に示すように、不完全なデルタテーブルが生成された後も同じエラーが発生し続けます。

私が受け取ったエラー

私のデータテーブル

これが私のコードです。もし助けていただける方がいたら本当に助かります。
Names Default To Here(1);
dt = Current Data Table();
allCols = dt << Get Column Names(string);
tpColName = allCols[1]; // Always Column 1
dutColName = allCols[2]; // Always Column 2
testCols = {};
For(i = 3, i <= N Items(allCols), i++,
Insert Into(testCols, allCols[i])
);
// 2. Extract Unique Values
Summarize(dt, dutList = By(Column(dt, 2)));
Summarize(dt, tpList = By(Column(dt, 1)));
// 3. Setup Results Table
dt_delta = New Table("DUT Delta Results");
dt_delta << New Column("DUT", Character, Nominal);
dt_delta << New Column("Shift", Character, Nominal);
For(i = 1, i <= N Items(testCols), i++,
dt_delta << New Column(testCols[i] || " Δ", Numeric, Continuous)
);
// 4. Robust Calculation Loop
For(d = 1, d <= N Items(dutList), d++,
currDUT = dutList[d];
For(t = 2, t <= N Items(tpList), t++,
p1 = tpList[t - 1];
p2 = tpList[t];
// This forces a match even if your DUT/TestPoints are numbers
r1Mat = dt << Get Rows Where(
Char(Column(dt, 2)[]) == Char(currDUT) & Char(Column(dt, 1)[]) == Char(p1)
);
r2Mat = dt << Get Rows Where(
Char(Column(dt, 2)[]) == Char(currDUT) & Char(Column(dt, 1)[]) == Char(p2)
);
// Ensure exactly one row found for each point to prevent subscript errors
If(N Rows(r1Mat) > 0 & N Rows(r2Mat) > 0,
row1 = r1Mat[1]; // Explicitly take first found row as integer
row2 = r2Mat[1];
newRow = dt_delta << Add Rows(1);
dt_delta:DUT[newRow] = currDUT;
dt_delta:Shift[newRow] = p2 || " - " || p1;
For(c = 1, c <= N Items(testCols), c++,
colN = testCols[c];
v1 = Column(dt, colN)[row1];
v2 = Column(dt, colN)[row2];
If(!Is Missing(v1) & !Is Missing(v2),
Column(dt_delta, colN || " Δ")[newRow] = v2 - v1
);
);
);
);
);
dt_delta << Bring Window To Front;
Edit (jthi): added JSL formatting
newRow = dt_delta << Add Rows(1);
行番号は返されません。次のように変更すると、
dt_delta << Add Rows(1);
newRow = nrows(dt_delta);
それはうまくいく
ジムありがとう、新しいコードを試しました。空のテーブルを取得していました。
うまくいきました!もっと大きなデータセットで試してみます。ありがとう、ジム

Excelでも計算を確認しましたが、データは一致しています。

ジムさん、こんにちは。JMPで、数値列をスケールアウトして限界値を含めるスクリプトや機能はありますか?そうすれば、変動チャートを実行する際に限界値も含まれるようになります。現状では、すべてのグラフはデータに基づいて自動的にスケール調整されています。ありがとうございます。
JMPデータテーブル内のすべての列には、列プロパティを設定できます。列ヘッダーを右クリックすると「列プロパティ」を選択すると、設定可能なすべての列プロパティが表示されます。必要なのは「仕様限界」と「軸」の2つです。一度設定すると、以降のすべての関連グラフで使用/表示されます。
こんにちは、ジムさん。これはいくつかのテストには有効かもしれませんが、テストが約2,000件あり、一度に1つずつ実行するのは難しいでしょう。すべてのテストに適用するスクリプトを実行する方法はありますか?ありがとうございます。
スクリプト化できます。あなたの限界はどこから来ているのでしょうか?
返信ありがとうございます。解決できました。ちなみに、私の制限は通常、各列にインポートされます。