Aggiungi/sottrai valori da due file jmpCIAO,
@txnelson @pmroz
Ho bisogno di aiuto per compensare il set di dati utilizzando il valore di riferimento in JSL
La prima tabella contiene il valore di riferimento

La seconda tabella contiene le misurazioni delle strisce testate

Voglio sottrarre la media della striscia A dalla tabella dei dati di riferimento e quindi aggiungerla al set di dati
Per esempio :
passo 1. il valore medio delle strisce A per corrente = (10+3)/2 = 6,5. Quindi 400 - 6,5 = 393,5 e così per le altre strisce
passo 2. Aggiungere 393,5 alla 2a tabella dati della striscia A >> 393,2 + 10 = 403,2 e analogamente per le altre strisce
La tabella finale dovrebbe avere i seguenti valori:

Fare riferimento al file allegato per i dettagli.
Grazie per l'aiuto!
Questo quello che ho provato:
Names Default To Here( 1 );
dt = Current data table();
dtOffset = Open(Limits);
colList = dt << get column names(string);
For( i = 1, i <= N Items( colList ), i++,
theRow = dtOffset << get rows where( dtOffset:Tests == colList[i] );
show(i,nrows(therow));
If( N Rows( theRow ) == 1,
offset = dtOffset:Offset[theRow[1]];
For( k = 1, k <= N Rows( dt ), k++,
Column( dt, i )[k] = Column( dt, i )[k] + offset
);
);
);
Ingegneria della qualità e dei processiRi: Aggiungi/sottrai valori da due file jmp@txnelson
puoi identificare cosa c'è che non va?
Ri: Aggiungi/sottrai valori da due file jmp@txnelson
Di seguito è riportata la schermata con i risultati che mi aspetto. Ho allegato la tabella dei dati dei risultati finali
Ecco i passaggi:
1. Leggere la tabella dati e la tabella dati di riferimento
2. Genera una nuova finestra per selezionare il numero del sito,
3. In base all'input dell'utente (numero sito 1 o 2), allineare tali dati ai valori della tabella dati di riferimento
Prendi la media dall'ID wafer, applica l'offset alla tabella dati principale

Names Default To Here( 1 );
Clear globals();
Clear log();
dt1 = Data table( "Reference data table" );
dt2 = Current data table(); /// Select Data table.jmp
For(i=1,i<=nrows(dt1),i++,
theTest = dt1:Tests[i];
try(column(dt2,theTest) << set property("TheMean", dt1:Mean[i]));
);
New window( "", modal,
ct = checkbox({"1","2"}),
Buttonbox ("Ok",
get = ct << Get Selected ();
)
);
sitenum = Transform Each({str}, get, Num(str));
Col_List1 = dt2 << Get Column Names( "String" );
//if (!contains(Col_List1, "SiteNumber"),
// dt2 <<NEW column=""></NEW> r = dt2 << get rows where(dt2:sitenumber == sitenum[1]); /// something needs to change here ****&&&**&&&&**&&&
//mean = dt1:Mean[dt1 << Get Rows Where( :Tests == name )];
mean = column(dt2, Col_list1[c]) << get property("theMean");
//measure = mean - Col Mean( If( dt2:Strips == dt2:Strips[r], Column( dt2, c ), . ) );
measure = mean - Col Mean(as Column( dt2, c ),:Wafer ID);
theMatrix = theMatrix || Column( dt2, c )[r] + measure;
);
Column( dt2, c ) << Set Values( theMatrix );
););
Ri: Aggiungi/sottrai valori da due file jmpIl tuo codice mi crea confusione.Quando hai
Per ogni riga
viene elaborata ogni riga separata all'interno della tabella dati.
Quando viene utilizzato Get Row Where(), i dati vengono trasmessi una sola volta.Puoi fornire un esempio dei risultati che ti aspetti?
Ri: Aggiungi/sottrai valori da due file jmpqualche consiglio Jim?
Ri: Aggiungi/sottrai valori da due file jmpGrazie, @txnelson
Ho usato la sintassi For Each Rows ma il completamento del ciclo richiede 40 minuti. Qualche modo alternativo?
For( c = 1, c <= N Col( dt2 ) -1, c++,
theMatrix = [];
name = Column( Col_List1[c] ) << Get name;
if (Contains( Col_List1[c], "Current"),
//For( r = 1, r <= N Rows( dt2 ), r++,
For Each Row(
<BR /> r = dt2 << get rows where(dt2:sitenumber == sitenum[1]);
//mean = dt1:Mean[dt1 << Get Rows Where( :Tests == name )];
mean = column(dt2, Col_list1[c]) << get property("theMean");
//measure = mean - Col Mean( If( dt2:Strips == dt2:Strips[r], Column( dt2, c ), . ) );
measure = mean - Col Mean(as Column( dt2, c ),:Wafer ID);
theMatrix = theMatrix || Column( dt2, c )[r] + measure;
);
Column( dt2, c ) << Set Values( theMatrix );
););Ri: Aggiungi/sottrai valori da due file jmpIl calcolo della “misura” non può essere calcolato.Hai scritto una riga di JSL che presuppone che stia scorrendo una tabella di dati, ma non si sta verificando alcun ciclo attraverso le righe.
Ri: Aggiungi/sottrai valori da due file jmp@txnelson
Scusa! Ho allegato file errati. Di seguito le tabelle dei dati aggiornati.
Ho provato ma i risultati non sono accurati
Names Default To Here( 1 );
Clear globals();
Clear log();
dt1 = Data table( "Reference data table" );
dt2 = Current data table(); /// Select Data table.jmp
For(i=1,i<=nrows(dt1),i++,
theTest = dt1:Tests[i];
try(column(dt2,theTest) << set property("TheMean", dt1:Mean[i]));
);
New window( "", modal,
ct = checkbox({"1","2"}),
Buttonbox ("Ok",
ft = ct << Get Selected Indices();
), ct << set all(1);
);
sitenum = {};
Insert Into (sitenum, ft);
Col_List1 = dt2 << Get Column Names( "String" );
//if (!contains(Col_List1, "SiteNumber"),
// dt2 <<NEW column=""></NEW>
Ri: Aggiungi/sottrai valori da due file jmpDando una rapida occhiata allo script, emergono un paio di elementi.
- La tabella dati di riferimento non contiene alcun nome di test che corrisponda ai nomi delle colonne nella tabella dati
- Get Rows Where() non funzionerà.Stai tentando di trovare tutte le righe che corrispondono al sitenum?Se è così dovrebbe essere
r = dt2 << get rows where(dt2:sitenumber == sitenum[1]);
Ri: Aggiungi/sottrai valori da due file jmpCiao Jim @txnelson ,
Domanda veloce:
Ho modificato lo script jsl e desidero filtrare le righe in base alla selezione della casella di controllo.
Lo script seguente creerà una nuova finestra, chiederà all'utente di selezionare la casella di controllo per il numero del sito.
Voglio aggiungere solo l'offset medio alla selezione SiteNumber.
Se è selezionato Numerosito 1, allinea solo quelle righe. Ho allegato entrambi i file
Ho provato a utilizzare get rows where ma i risultati non sembrano essere accurati. Cerco qualche suggerimento
Names Default To Here( 1 );
Clear globals();
Clear log();
dt1 = Data table( "Reference data table" );
dt2 = Current data table(); /// Select Data table.jmp
For(i=1,i<=nrows(dt1),i++,
theTest = dt1:Tests[i];
try(column(dt2,theTest) << set property("TheMean", dt1:Mean[i]));
);
New window( "", modal,
ct = checkbox({"1","2"}),
Buttonbox ("Ok",
ft = ct << Get Selected Indices();
), ct << set all(1);
);
sitenum = {2};
//Insert Into (sitenum, ft);
Col_List1 = dt2 << Get Column Names( "String" );
//if (!contains(Col_List1, "SiteNumber"),
// dt2 <<NEW column=""></NEW>
Ri: Aggiungi/sottrai valori da due file jmpGrazie Jim 
Ri: Aggiungi/sottrai valori da due file jmpStavo apportando modifiche al codice di Mark, basate su problemi di sintassi, non su problemi di logica.Ho rielaborato il codice e credo che funzionerà
Names Default To Here( 1 );
dt1 = open( "Reference data.jmp" );
dt2 = open( "Data set.jmp" );
For( c = 1, c <= N Col( dt2 ) -1, c++,
theMatrix = [];
name = Column( dt2, c ) << Get Name;
For( r = 1, r <= N Rows( dt2 ), r++,
mean = dt1:Mean[dt1 << Get Rows Where( :Tests == name )];
measure = mean - Col Mean( If( dt2:Strips == dt2:Strips[r], Column( dt2, c ), . ) );
theMatrix = theMatrix || Column( dt2, c )[r] + measure;
);
Column( dt2, c ) << Set Values( theMatrix );
);
Ri: Aggiungi/sottrai valori da due file jmpEhi Jim,
Grazie per la correzione, ma neanche questo sembrava funzionare.

Ri: Aggiungi/sottrai valori da due file jmpEra un "(" fuori posto).Ecco una versione corretta
Names Default To Here( 1 );
dt1 = Open( "Reference data.jmp" );
dt2 = Open( "Data set.jmp" );
For( c = 1, c <= N Col( dt2 ), c++,
name = Column( dt2, c ) << Get Name;
mean = dt1:Mean[dt1 << Get Rows Where( :Tests == name )];
measure = mean - Column( dt2, c ) << Get As Matrix;
Column( dt2, c ) << Set Values( measure );
);
Ri: Aggiungi/sottrai valori da due file jmpGrazie Marco. Il codice non sembra funzionare

Ri: Aggiungi/sottrai valori da due file jmpPer favore prova questo esempio:
Names Default to Here( 1 );
dt1 = Open( "Reference data.jmp" );
dt2 = Open( "Data set.jmp" );
For( c = 1, c <= N Col( dt2 ), c++,
name = Column( dt2, c ) << Get Name;
mean = dt1:Mean[dt1 << Get Rows Where( :Tests == name )];
measure = mean - (Column dt2, c ) << Get As Matrix);
Column( dt2, c) << Set Values( measure );
);