Manuale :
1. Ho 2 tabelle di dati, una è la lista dei parametri con limiti di controllo e l'altra è la tabella dei dati principale.


2. Devo ordinare manualmente ogni colonna [ordine crescente] in base all'ordine nel modello. Se il contatto è inferiore a 2 [DC è 6] o Contact maggiore di 10 [DC è 7] e lo inserisco nella colonna DC - Dopo aver inserito i valori in DC, nascondo ed escludo le righe con i valori DC e procedo al parametro successivo e ordinarlo di nuovo
Come posso farlo per loop se ho diversi parametri e un set di big data?
In primo luogo, credo che, date le tabelle di dati di esempio che hai fornito, hai fatto un errore nella tua verbosità quando parli
" Contatto maggiore di 10 [DC is 7] ". Dati i valori nella tabella dei dati dei parametri, credo che tu intendessi scrivere:
"Contatto maggiore di 23 [DC is 7]"
Supponendo questo, credo che il seguente script funzionerà per quello che vuoi. Non richiede di scorrere riga per riga nella tabella dei dati, il che significa che non deve essere ordinato. Spero sia quello di cui hai bisogno
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];
);Domanda di follow-up:
Invece di dover codificare i dtParms, li ho archiviati in una tabella di dati con lo stesso nome ma non produce risultati con quello che utilizza lo scripting, ma dice " L'accesso alla tabella di dati con ambito richiede una colonna della tabella di dati o una variabile {1} "- come posso risolvere questo problema?
Per il codice:
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];
);
per funzionare correttamente, è necessario associare la variabile "dtParms" alla tabella di dati che contiene i parametri. Hai dichiarato di aver salvato la tabella di dati con lo stesso nome, quindi suppongo che tu abbia chiamato la tabella di dati "Parametri". Quindi, ciò che devi fare è aprire quella tabella di dati prima di eseguire lo script e aggiungere allo script la seguente dichiarazione
dtParms = Data Table("Parameters");