Iterar el script sobre una tabla diferenteTengo este nivel defectuoso que determina la cantidad de veces que se repetirá.
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" );
Este es el código que debe iterarse dependiendo de cuántos niveles defectuosos haya. Mi problema es ¿puedo iterar a través de diferentes tablas usando el mismo script? ¿O cómo puedo repetir este proceso dependiendo del número de niveles defectuosos? Como por ejemplo, mi nivel de deserción es 3. Luego, este código debe ejecutarse tres veces, iterando a través de las tres tablas que se han subconjunto. Gracias
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];
);
AnalíticaTabla de datosOtroScriptingRe: iterar script sobre diferentes tablasEstoy seguro de que el JSL siguiente, tal como está escrito, no funcionará. El código de muestra que se proporcionó tenía punteros a tablas de datos no definidas, por lo tanto, estoy haciendo algunas suposiciones que pueden no ser exactamente correctas. Sin embargo, si sigue la lógica y la sintaxis que proporciono, debería poder tener una idea de cómo utilizar su código único para recorrer cualquier número de parámetros de entrada especificados
// 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];
);
);
Re: iterar script sobre diferentes tablas¡Gracias por una respuesta rápida! Aunque tengo una pregunta de seguimiento,
deftb << Nueva columna ("MD1", numérico); => que será el almacenamiento de los valores iterados, debe ser (MD1, MD2, MD3 ..) según el número de iteraciones. Por ejemplo, la iteración para los valores de la tabla 1 se almacenará en MD1, la iteración para los valores de la tabla 2 se almacenará en MD2 y así sucesivamente. Intenté agregar esta línea pero no funciona:
MD = {"MD1", "MD2", "MD3", "MD4", "MD5", "MD6"};
Para (k = 1, k <= N elementos (las Tablas), k ++,
deftb << Nueva columna (MD [k + 1], numérico);
Gracias por la ayuda
Re: iterar script sobre diferentes tablasLos dos códigos siguientes funcionan muy bien para mí, siempre que se haya establecido la referencia de la tabla de datos deftb y se haya completado la lista de tablas. Dado que el script no funcionó para usted, ¿qué mensajes de error había en el 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 )
);Re: iterar script sobre diferentes tablasAhora está funcionando, gracias por la rápida explicación. Y última pregunta, después de crear el almacenamiento de columnas para los valores, este ciclo muestra un error: Rango de subíndice {1} en el acceso o evaluación de 'las Tablas [k]', las Tablas [/ * ### * / k]
Para (i = 1, i <= N elementos (params), i ++,
foundRows = deftb << obtener filas donde (
Como Columna (deftb, columna (las Tablas [k], "Parámetro") [i]) Falta (deftb: MD [k + 1]) == 1
);
deftb: MD [k + 1] [foundRows] = columna (las Tablas [k], "MD_LL") [i];
foundRows = deftb << obtener filas donde (
Como Columna (deftb, columna (las Tablas [k], "Parámetro") [i]) Falta (deftb: MD [k + 1]) == 1
);
deftb: MD [k + 1] [foundRows] = columna (las Tablas [k], "MD_UL") [i];
);
¿Es por mi médico [k + 1]?Re: iterar script sobre diferentes tablasPara averiguar lo que está sucediendo aquí, todo lo que necesita hacer es determinar el valor de la variable k y le dirá por qué hacer referencia a las Tablas [k] apunta a un subíndice no válido. Normalmente, esto se debe a que ha utilizado un bucle For () con k como valor de índice y, en la especificación del bucle For (), está incrementando k más allá del número de elementos de la lista Tablas. O, la variable k que se usó en una parte anterior del script, y cuando se hace referencia a ella en este punto, el valor de k es inapropiado.
Si pasa el cursor sobre cualquiera de las referencias a la variable k en su secuencia de comandos, mostrará cuál es el valor actual de k. Debería poder averiguar de dónde provino el valor.
una última nota ... dado que no está inicializando sus variables al principio de su script, los valores de las variables se establecerán en los valores que tenían la última vez que finalizó el script. Por lo tanto, eso también puede estar causando el problema.