Offset-Daten von Standort 1Hi,
Ich habe ein JMP-Skript, das die Testergebnisse basierend auf den Werten der Referenzdatentabelle ausgleicht.
Es wird:
1. Datentabelle und Referenzdatentabelle lesen
2. Generieren Sie ein neues Fenster, um die Standortnummer auszuwählen.
3. Richten Sie diese Daten basierend auf der Benutzereingabe (Standortnummer 1 oder 2) an den Werten der Referenzdatentabelle aus
Nehmen Sie den Mittelwert durch die Wafer-ID und wenden Sie den Offset auf die Hauptdatentabelle an
Hier ist das Skript: Es erzeugt nicht die erwartete Ausgabe
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 );
);
);
);SkripterstellungBetreff: Daten von Standort 1 ausgleichenDie Art und Weise, wie ich damit umgehen würde, wäre, Show-Anweisungen in den Code einzufügen, um festzustellen, an welchem Punkt ich keine korrekten Ergebnisse erhalte.Geben Sie beispielsweise nach transform each show(sitenum) ein.Auf diese Weise können Sie den Ablauf der Logik nachvollziehen und sehen, wo sie fehlschlägt.Alternativ können Sie das Debugger-Tool verwenden, um dieselbe Aufgabe auszuführen.
Betreff: Daten von Standort 1 ausgleichen@txnelson schätzen, wenn Sie Rat können
Betreff: Daten von Standort 1 ausgleichenNames 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 );
);
);
);Betreff: Daten von Standort 1 ausgleichen@txnelson Es tut uns leid. Es war ein Tippfehler im Code.
Hier die richtige Aussage:
// 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" ),
Betreff: Daten von Standort 1 ausgleichenSie müssen entweder den Code mithilfe der Show()-Funktion schrittweise durchlaufen, um zu sehen, auf welche Werte gesetzt wird, und dann feststellen, wo Ihre Logik schief läuft, oder den JMP-Debugger verwenden, um die Analyse durchzuführen.
Das ist die Methode, die ich oder jemand anderes im Forum tun müsste.Und Sie haben den Vorteil, dass Sie verstehen, was Sie von der Ausgabe erwarten.
Betreff: Daten von Standort 1 ausgleichenSie könnten auch die verwenden JMP-Debugger um Variablen mithilfe von Haltepunkten zu untersuchen oder zu beobachten oder den Code schrittweise zu durchlaufen.
Betreff: Daten von Standort 1 ausgleichenSie sollten wirklich lernen, wie man bessere Fragen stellt ... und wie man Skripts debuggt. Abgesehen davon ist hier ein funktionierendes Skript, das das tut, was Sie brauchen:
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]
);
);
);
);
);