cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Discussions

Solve problems, and share tips and tricks with other JMP users.
Choose Language Hide Translation Bar
RayE
Level III

Generate Delta table to calculate deltas between two temp measurments

I have a data table that combines 2 datasets for 2 temperature for multiple units. Each unit is subjected to 20+ tests at 2 temps.

I need to generate a delta table for each unit, that calculate the delta between temp2 - temp1 as shown in table "Data_Table".

I keep getting the same error after an incomplete delta table is generated shown next

RayE_3-1769461059715.png

 

the error I get 

RayE_2-1769461006624.png

 

My data table 

RayE_4-1769461096642.png

here is my code, if any can help I would really appreciate it

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

 

10 REPLIES 10
jthi
Super User

Re: Generate Delta table to calculate deltas between two temp measurments

You can script it. Where are your limits coming from?

-Jarmo

Recommended Articles