Iterieren Sie das Skript über eine andere TabelleIch habe diese Fehlerstufe, die bestimmt, wie oft sie wiederholt wird.
dtparms << Subset( By( :Defecting_Level ), All rows, Selected columns only( 0 ), columns( :Parameter, :CL_LL, :CL_UL, :MD_LL, :MD_UL ) );
dtParms1 = Data Table( "Defecting_Level=1" );<BR />dtParms2 = Data Table( "Defecting_Level=2" );
Dies ist der Code, der je nach Anzahl der fehlerhaften Ebenen iteriert werden muss. Mein Problem ist, kann ich mit demselben Skript durch verschiedene Tabellen iterieren? Oder wie kann ich diesen Vorgang in Abhängigkeit von der Anzahl der fehlerhaften Ebenen wiederholen? Wie zum Beispiel ist meine Fehlerstufe 3. Dann muss dieser Code dreimal ausgeführt werden und die drei Tabellen durchlaufen, die Teilmenge waren. Vielen Dank
deftb << New Column( "MD1", numeric );
parameters = Column( dtParms1, "Parameter" ) << get values;
deftb_colnames = deftb << get column names( string );
parameters = Associative Array( Eval( parameters ) );
deftb_colnames = Associative Array( Eval( deftb_colnames ) );
parameters << Intersect( deftb_colnames );
params = parameters << get keys;
For( i = 1, i <= N Items( params ), i++,
foundRows = deftb << get rows where( As Column( deftb, dtParms1:Parameter[i] ) < dtParms1:CL_LL[i] & Is Missing( deftb:MD1 ) == 1 );
deftb:MD1[foundRows] = dtParms1:MD_LL[i];
foundRows = deftb << get rows where( As Column( deftb, dtParms1:Parameter[i] ) > dtParms1:CL_UL[i] & Is Missing( deftb:MD1 ) == 1 );
deftb:MD1[foundRows] = dtParms1:MD_UL[i];
);
AnalytikDatentabelleAndereSkriptingBetreff: Skript über verschiedene Tabellen iterierenIch bin sicher, dass die unten stehende JSL, wie geschrieben, nicht funktionieren wird. Der bereitgestellte Beispielcode enthielt Zeiger auf nicht definierte Datentabellen. Daher gehe ich von einigen Annahmen aus, die möglicherweise nicht genau korrekt sind. Wenn Sie jedoch der von mir bereitgestellten Logik und Syntax folgen, sollten Sie in der Lage sein, eine Vorstellung davon zu bekommen, wie Sie Ihren einen Code verwenden können, um die angegebene Anzahl von Eingabeparametern zu durchlaufen
// By specifying the variable to hold the data table names
// that will be created from the Subset with the By clause
// the variable specified becomes a List with an element
// for each table created
theTables = dtparms << Subset(
By( :Defecting_Level ),
All rows,
columns( :Parameter, :CL_LL, :CL_UL, :MD_LL, :MD_UL )
);
Show( theTables );
For( k = 1, k <= N Items( theTables ), k++,
deftb << New Column( "MD1", numeric );
parameters = Column( theTables[k], "Parameter" ) << get values;
deftb_colnames = deftb << get column names( string );
parameters = Associative Array( Eval( parameters ) );
deftb_colnames = Associative Array( Eval( deftb_colnames ) );
parameters << Intersect( deftb_colnames );
params = parameters << get keys;
For( i = 1, i <= N Items( params ), i++,
foundRows = deftb << get rows where(
As Column( deftb, column( theTables[k],"Parameter")[i] ) < column( theTables[k], "CL_LL")[i] &
Is Missing( deftb:MD1 ) == 1
);
deftb:MD1[foundRows] = column(theTables[k],"MD_LL")[i];
foundRows = deftb << get rows where(
As Column( deftb, column( theTables[k],"Parameter")[i] ) < column( theTables[k], "CL_UL")[i] &
Is Missing( deftb:MD1 ) == 1
);
deftb:MD1[foundRows] = column( theTables[k],"MD_UL")[i];
);
);
Betreff: Skript über verschiedene Tabellen iterierenVielen Dank für eine schnelle Antwort! Ich habe eine Folgefrage tho,
deftb << Neue Spalte ("MD1", numerisch); => Die Speicherung der iterierten Werte sollte (MD1, MD2, MD3 ..) entsprechend der Anzahl der Iterationen sein. Beispielsweise wird die Iteration für Werte von Tabelle 1 in MD1 gespeichert, die Iteration für Werte von Tabelle 2 wird in MD2 gespeichert und so weiter. Ich habe versucht, diese Zeile hinzuzufügen, aber es funktioniert nicht:
MD = {"MD1", "MD2", "MD3", "MD4", "MD5", "MD6"};
Für (k = 1, k <= N Items (theTables), k ++,
deftb << Neue Spalte (MD [k + 1], numerisch);
Danke für die Hilfe
Betreff: Skript über verschiedene Tabellen iterierenDie beiden folgenden Codeteile funktionieren für mich hervorragend, solange die Referenz der Deftb-Datentabelle festgelegt und die Liste theTables ausgefüllt wurde. Welche Fehlermeldungen waren im Protokoll enthalten, da das Skript bei Ihnen nicht funktioniert hat?
MD = {"MD1", "MD2", "MD3", "MD4", "MD5", "MD6"};
For( k = 1, k <= N Items( theTables ), k++,
deftb << New Column( MD[k + 1], numeric )
);
// or, why go through all of the work to create the list MD
// when you can easily create the character string required
// for the column name as shown below
deftb = Current Data Table();
For( k = 1, k <= N Items( theTables ), k++,
deftb << New Column( "MD" || char[k + 1]), numeric )
);Betreff: Skript über verschiedene Tabellen iterierenJetzt funktioniert es, danke für die schnelle Erklärung. Und letzte Frage, nach dem Erstellen des Spaltenspeichers für die Werte, zeigt diese Schleife einen Fehler: Indexbereich {1} beim Zugriff oder bei der Auswertung von 'theTables [k]', theTables [/ * ### * / k]
Für (i = 1, i <= N Items (params), i ++,
foundRows = deftb << Zeilen abrufen, in denen (
Als Spalte (deftb, Spalte (theTables [k], "Parameter") [i]) Fehlt (deftb: MD [k + 1]) == 1
);
deftb: MD [k + 1] [foundRows] = Spalte (theTables [k], "MD_LL") [i];
foundRows = deftb << Zeilen abrufen, in denen (
Als Spalte (deftb, Spalte (theTables [k], "Parameter") [i]) Fehlt (deftb: MD [k + 1]) == 1
);
deftb: MD [k + 1] [foundRows] = Spalte (theTables [k], "MD_UL") [i];
);
Liegt es an meiner MD [k + 1]?Betreff: Skript über verschiedene Tabellen iterierenUm herauszufinden, was hier vor sich geht, müssen Sie lediglich den Wert der Variablen k bestimmen und erfahren, warum das Verweisen auf die Tabellen [k] auf einen ungültigen Index verweist. Dies liegt normalerweise daran, dass Sie entweder eine For () - Schleife mit k als Indexwert verwendet haben und in der Spezifikation der For () - Schleife k über die Anzahl der Elemente der Tabellenliste hinaus inkrementieren. Oder die Variable k, die in einem vorherigen Teil des Skripts verwendet wurde, und wenn an dieser Stelle darauf verwiesen wird, ist der Wert von k unangemessen.
Wenn Sie mit der Maus über einen der Verweise auf die Variable k in Ihrem Skript fahren, wird der aktuelle Wert von k angezeigt. Sie sollten dann herausfinden können, woher der Wert stammt.
Ein letzter Hinweis ... Da Sie Ihre Variablen nicht am Anfang Ihres Skripts initialisieren, werden die Werte der Variablen auf die Werte gesetzt, die sie zum letzten Mal waren, als das Skript beendet wurde. Daher kann dies auch das Problem verursachen.
Betreff: Skript über verschiedene Tabellen iterierenIch bin also mit diesen Schleifen wieder irgendwie verloren und erhalte nur den Wert 6 in der MD1-Spalte anstelle der Werte aus jeder Tabelle aus den Tabellen und platziere sie in den jeweiligen MDs. SOrry Ich bin wirklich verwirrt mit der For-Schleife in jmp
theTables = dtparms << Subset(
By( :Dispo_name ),
All rows,
Selected columns only( 0 ),
columns( :Parameter, :CL_LL, :CL_UL, :MD_LL, :MD_UL )
);
//create columns
For( n = 1, n <= N Items( theTables ), n++,
deftb << New Column( "MD" || Char( n ), numeric )
);
//loop through each table and store value in MDs
For( k = 1, k <= N Items( theTables ), k++,
parameters = Column( theTables[k], "Parameter" ) << get values;
deftb_colnames = deftb << get column names( string );
parameters = Associative Array( Eval( parameters ) );
deftb_colnames = Associative Array( Eval( deftb_colnames ) );
parameters << Intersect( deftb_colnames );
params = parameters << get keys;
Show( params );
For( i = 1, i <= N Items( params ), i++,
foundRows = deftb << get rows where(
As Column( deftb, Column( theTables[k], "Parameter" )[i] ) < Column( theTables[k], "CL_LL" )[i] &
Is Missing( deftb:MD ) == 1
);
deftb:MD[foundRows] = Column( theTables[k], "MD_LL" )[i];
foundRows = deftb << get rows where(
As Column( deftb, Column( theTables[k], "Parameter" )[i] ) < Column( theTables[k], "CL_UL" )[i] &
Is Missing( deftb:MD ) == 1
);
deftb:MD[foundRows] = Column( theTables[k], "MD_UL" )[i];
);
);