Handbuch:
1. Ich habe 2 Datentabellen, eine ist die Parameterliste mit Kontrollgrenzen und die andere ist die Hauptdatentabelle.


2. Ich muss jede Spalte manuell [aufsteigende Reihenfolge] basierend auf der Reihenfolge in der Vorlage sortieren. Wenn Kontakt kleiner als 2 [DC ist 6] oder Kontakt größer als 10 [DC ist 7] ist und in die DC-Spalte eingefügt wird - Nachdem ich Werte in DC eingegeben habe, blende ich die Zeilen mit DC-Werten aus und aus und gehe zu nächster Parameter und sortiere ihn erneut
Wie mache ich es für die Schleife, wenn ich mehrere Parameter und einen großen Datensatz habe?
Erstens glaube ich, dass Sie angesichts der von Ihnen bereitgestellten Beispieldatentabellen einen Fehler in Ihrer Sprache gemacht haben, als Sie darüber gesprochen haben
"" Kontakt größer als 10 [DC ist 7] ". Angesichts der Werte in der Parameterdatentabelle wollten Sie meiner Meinung nach Folgendes schreiben:
"Kontakt größer als 23 [DC ist 7]"
Unter dieser Annahme glaube ich, dass das folgende Skript für das funktioniert, was Sie wollen. Es ist nicht erforderlich, Zeile für Zeile in der Datentabelle durchzugehen, was bedeutet, dass es nicht sortiert werden muss. Ich hoffe es ist was du brauchst
Names Default To Here( 1 );
// Create Sample data tables
dtParms = New Table("Parameters",
Add Rows(4),
New Column("Order",formula(Row())),
New Column("Parameter", character,values({"Contact","MST","Height","Weight"})),
New Column("CL_LL", values([2,23,59,35])),
New Column("CL_UL", values([23,100,109,105])),
New Column("DC_LL", values([6,10,21,33])),
New Column("DC_UL", values([7,11,22,39]))
);
dtMain = New Table("Main",
Add Rows(100),
New Column("Contact", formula(randominteger(1,27))),
New Column("MST", formula(randominteger(18,115))),
New Column("Height", formula(randominteger(50,120))),
New Column("Weight", formula(randominteger(30,110))),
New Column("DC")
);
dtMain << run formulas;
dtMain:Contact << delete formula;
dtMain:MST << delete formula;
dtMain:Height << delete formula;
dtMain:Weight << delete formula;
// Loop through the data and assign the above and below limits
For(i=1,i<=N Rows(dtParms),i++,
foundRows = dtMain << get rows where( as column(dtMain, dtParms:Parameter[i]) < dtParms:CL_LL[i] & isMissing(dtMain:DC) == 1 );
dtMain:DC[foundRows] = dtParms:DC_LL[i];
foundRows = dtMain << get rows where( as column(dtMain, dtParms:Parameter[i]) > dtParms:CL_UL[i] & isMissing(dtMain:DC) == 1);
dtMain:DC[foundRows] = dtParms:DC_UL[i];
);Zusatzfrage:
Anstatt die dtParms codieren zu müssen, habe ich sie in einer Datentabelle mit demselben Namen gespeichert, aber es werden keine Ergebnisse mit der mit Skripten verwendet - es heißt jedoch " Der Zugriff auf Datentabellen mit Gültigkeitsbereich erfordert eine Datentabellenspalte oder -variable {1} "- wie gehe ich damit um?
Für den Code:
For(i=1,i<=N Rows(dtParms),i++,
foundRows = dtMain << get rows where( as column(dtMain, dtParms:Parameter[i]) < dtParms:CL_LL[i] & isMissing(dtMain:DC) == 1 );
dtMain:DC[foundRows] = dtParms:DC_LL[i];
foundRows = dtMain << get rows where( as column(dtMain, dtParms:Parameter[i]) > dtParms:CL_UL[i] & isMissing(dtMain:DC) == 1);
dtMain:DC[foundRows] = dtParms:DC_UL[i];
);
Um richtig zu arbeiten, müssen Sie die Variable "dtParms" der Datentabelle zuordnen, die die Parameter enthält. Sie haben angegeben, dass Sie die Datentabelle mit demselben Namen gespeichert haben. Ich gehe also davon aus, dass Sie die Datentabelle "Parameter" genannt haben. Sie müssen also diese Datentabelle öffnen, bevor Sie das Skript ausführen, und dem Skript die folgende Anweisung hinzufügen
dtParms = Data Table("Parameters");