Itera lo script su una tabella diversaHo questo livello di deformazione che determina il numero di volte che itererà.
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" );
Questo è il codice che deve essere ripetuto a seconda di quanti livelli di difetto ci sono. Il mio problema è che posso iterare attraverso tabelle diverse usando lo stesso script? O come posso ripetere questo processo a seconda del numero di livelli di difettosità? Ad esempio, il mio livello di deformazione è 3. Quindi questo codice deve essere eseguito tre volte, iterando attraverso le tre tabelle che sono state sottoinsieme. Grazie
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];
);
AnalyticsTabella datiAltroScriptingRi: Iterate lo script su una tabella diversaSono sicuro che il JSL di seguito, come scritto, non funzionerà. Il codice di esempio fornito aveva puntatori a tabelle di dati non definite, quindi sto facendo alcune ipotesi che potrebbero non essere esattamente corrette. Tuttavia, se segui la logica e la sintassi che fornisco, dovresti essere in grado di avere un'idea di come utilizzare il tuo pezzo di codice per eseguire il loop su qualsiasi numero di parametri di input specificato
// 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];
);
);
Ri: Iterate lo script su una tabella diversaGrazie per una rapida risposta! Ho una domanda di follow-up però,
deftb << Nuova colonna ("MD1", numerico); => che sarà la memorizzazione dei valori iterati, dovrebbe essere (MD1, MD2, MD3 ..) in base al numero di iterazioni. Ad esempio, l'iterazione per i valori della tabella 1 verrà memorizzata in MD1, l'iterazione per i valori della tabella 2 verrà memorizzata in MD2 e così via. Ho provato ad aggiungere questa riga ma non funziona:
MD = {"MD1", "MD2", "MD3", "MD4", "MD5", "MD6"};
Per (k = 1, k <= N elementi (le tabelle), k ++,
deftb << Nuova colonna (MD [k + 1], numerico);
Grazie per l'aiuto
Ri: Iterate lo script su una tabella diversaEntrambe le parti di codice seguenti funzionano alla grande per me, a condizione che sia stato impostato il riferimento alla tabella dati deftb e l'elenco delle tabelle sia stato popolato. Dato che lo script non ha funzionato per te, quali messaggi di errore c'erano nel registro?
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 )
);Ri: Iterate lo script su una tabella diversaOra funziona, grazie per la rapida spiegazione. E l'ultima domanda, dopo aver creato l'archiviazione della colonna per i valori, questo ciclo mostra un errore: intervallo di pedici {1} nell'accesso o nella valutazione di "le tabelle [k]", le tabelle [/ * ### * / k]
Per (i = 1, i <= N elementi (parametri), i ++,
foundRows = deftb << ottieni le righe dove (
As Column (deftb, column (theTables [k], "Parameter") [i]) Manca (deftb: MD [k + 1]) == 1
);
deftb: MD [k + 1] [foundRows] = colonna (theTables [k], "MD_LL") [i];
foundRows = deftb << ottieni le righe dove (
As Column (deftb, column (theTables [k], "Parameter") [i]) Manca (deftb: MD [k + 1]) == 1
);
deftb: MD [k + 1] [foundRows] = colonna (theTables [k], "MD_UL") [i];
);
È a causa del mio MD [k + 1]?Ri: Iterate lo script su una tabella diversaPer capire cosa sta succedendo qui, tutto ciò che devi fare è determinare il valore della variabile k e ti dirà perché fare riferimento alle Tabelle [k] punta a un indice non valido. In genere ciò è dovuto al fatto che hai utilizzato un ciclo For () con k come valore di indice e nella specifica del ciclo For (), stai incrementando k oltre il numero di elementi dell'elenco Tabelle. Oppure, la variabile k è stata utilizzata in una parte precedente dello script e quando si fa riferimento a questo punto, il valore di k è inappropriato.
Se passi il mouse su uno qualsiasi dei riferimenti alla variabile k nello script, verrà visualizzato il valore corrente di k. Dovresti essere in grado di scoprire da dove proviene il valore.
un'ultima nota .... poiché non stai inizializzando le tue variabili all'inizio del tuo script, i valori delle variabili saranno impostati ai valori che erano l'ultima volta che lo script è terminato. Pertanto, anche questo può causare il problema.
Ri: Iterate lo script su una tabella diversaQuindi sono un po 'perso di nuovo con questi loop, e ottengo solo il valore di 6 all'interno della colonna MD1 invece dei valori di ciascuna tabella dalle tabelle e inseriti nei rispettivi MD. Sfortunatamente sono davvero confuso con il ciclo For 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];
);
);