Datos del sitio de compensación 1Hola,
Tengo un script jmp que compensa los resultados de la prueba en función de los valores de la tabla de datos de referencia.
Va a:
1. Leer la tabla de datos y la tabla de datos de referencia
2. Genere una nueva ventana para seleccionar el número de sitio,
3. Según la entrada del usuario (Número de sitio 1 o 2), alinee esos datos con los valores de la tabla de datos de referencia
Tome la media por ID de oblea, aplique el desplazamiento a la tabla de datos principal
Aquí está el script: no produce el resultado esperado
Names Default To Here( 1 );
dt1 = Data Table( "Reference data table" );
dt2 = Current Data Table();
For( i = 1, i <= N Rows( 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" );
For( c = 1, c <= N Col( dt2 ) - 1, c++,
theMatrix = [];
name = Column( Col_List1[c] ) << Get name;
If( Contains( Col_List1[c], "IL" ),
mean = .;
Try( mean = Column( dt2, col_list1[c] ) << get property( "theMean" ) );
// Don't process if a value for theMean does not exist
If( Is Missing( mean ) == 0,
For Each Row(
If( Contains(sitenum, dt2:SiteNumber), // Something needs to be changed here *****
r = Row();
//mean = dt1:Mean[dt1 << Get Rows Where( :Tests == name )];
//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 );
);
);
);secuencias de comandosRe: Datos del sitio de compensación 1La forma en que manejaría esto sería poner instrucciones show en el código para determinar en qué punto no estoy obteniendo los resultados correctos.Por ejemplo, después de transformar cada uno, coloque show(sitenum).De esta manera, puede rastrear la progresión de la lógica y ver dónde falla.Alternativamente, puede usar la herramienta de depuración para realizar la misma tarea.
Re: Datos del sitio de compensación 1@txnelson agradezco si puedes aconsejarme
Re: Datos del sitio de compensación 1Names Default To Here( 1 );
dt1 = Data Table( "Reference data table" );
dt2 = Current Data Table();
For( i = 1, i <= N Rows( dt1 ), i++,
theTest = dt1:Tests[i];
Try( Column( dt2, theTest ) << set property( "TheMean", dt1:mean[i] ) );
);
New Window( "",
modal,
ct = Check Box( {"1", "2"} ),
Button Box( "Ok", get = ct << Get Selected() )
);
sitenum = Transform Each( {str}, get, Num( str ) );
Col_List1 = dt2 << Get Column Names( "String" );
For( c = 1, c <= N Col( dt2 ) - 1, c++,
theMatrix = [];
name = Column( Col_List1[c] ) << Get name;
// The following code is never executed since none of the column names
// have the value "IL" in their name
If( Contains( Col_List1[c], "IL" ),
mean = .;
Try( mean = Column( dt2, col_list1[c] ) << get property( "theMean" ) );
// Don't process if a value for theMean does not exist
If( Is Missing( mean ) == 0,
For Each Row(
If( Contains( sitenum, dt2:SiteNumber ), // Something needs to be changed here *****
r = Row();
//mean = dt1:Mean[dt1 << Get Rows Where( :Tests == name )];
//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 );
);
);
);Re: Datos del sitio de compensación 1@txnelson Lo siento. Hubo un error tipográfico en el código.
Aquí está la declaración correcta:
// The following code is never executed since none of the column names
// have the value "IL" in their name
If( Contains( Col_List1[c], "Current" ),
Re: Datos del sitio de compensación 1Debe recorrer paso a paso el código usando la función Show() para ver qué valores se están configurando y luego determinar dónde falla su lógica, o usar el depurador JMP para hacer el análisis.
Ese es el método que yo o cualquier otra persona en el foro tendríamos que hacer.Y tiene la ventaja de comprender lo que espera que sea el resultado.
Re: Datos del sitio de compensación 1También puede usar el Depurador JMP para examinar u observar variables usando puntos de interrupción o recorriendo el código.
Re: Datos del sitio de compensación 1Realmente deberías aprender a hacer mejores preguntas... y aprender a depurar scripts. Habiendo dicho eso, aquí hay un script de trabajo que hace lo que necesita:
Names Default To Here( 1 );
dt1 = Data Table( "Reference data table" );
dt2 = Current Data Table();
For( i = 1, i <= N Rows( dt1 ), i++,
theTest = dt1:Tests[i];
Try( Column( dt2, theTest ) << set property( "TheMean", dt1:mean[i] ) );
);
New Window( "",
modal,
ct = Check Box( {"1", "2"} ),
Button Box( "Ok", get = ct << Get Selected() )
);
sitenum = Transform Each( {str}, get, Num( str ) );
Col_List1 = dt2 << Get Column Names( "String" );
For( c = 1, c <= N Col( dt2 ) - 1, c++,
If( Contains( Col_List1[c], "Current" ),
mean = .;
Try( mean = Column( dt2, col_list1[c] ) << get property( "theMean" ) );
// Don't process if a value for theMean does not exist
If( !Is Missing( mean ),
For(k=1, k<= n items(sitenum), k++,
rows = dt2 << Select Where( :SiteNumber == sitenum[k] ) << Get Selected Rows;
dt2 << Clear Select();
NewValues = Column( dt2, c )[rows]+mean;
For(i=1, i<= n items(NewValues), i++,
Column( dt2, c )[rows[i]] = NewValues[i]
);
);
);
);
);