Manual:
1) Tengo 2 tablas de datos, una es la lista de parámetros con límites de control y la otra es la tabla de datos principal.


2) Tengo que ordenar cada columna manualmente [orden ascendente] según el orden en la plantilla. Si Contact es menor que 2 [DC es 6] o Contact mayor que 10 [DC es 7] y lo coloca en la columna DC - Después de ingresar valores en DC, oculto y excluyo las filas con valores DC y procedo a siguiente parámetro y ordenarlo de nuevo
¿Cómo lo hago para bucle si tengo varios parámetros y un gran conjunto de datos?
Primero, creo que, dadas las tablas de datos de muestra que proporcionó, que cometió un error en su palabrería al hablar sobre
" Contacto mayor que 10 [DC es 7] ". Dados los valores en la tabla de datos de parámetros, creo que querías escribir:
"Contacto mayor que 23 [DC es 7]"
Suponiendo esto, creo que el siguiente script funcionará para lo que quieres. No requiere pasar fila por fila en la tabla de datos, lo que significa que no tiene que ordenarse. Espero que sea lo que necesitas
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];
);Siguiente pregunta:
En lugar de tener que codificar los dtParms, los almacené en una tabla de datos con el mismo nombre, pero no produce resultados con el que usa secuencias de comandos; sin embargo, dice " El acceso a la tabla de datos con ámbito requiere una columna o variable de la tabla de datos {1} ". ¿Cómo abordo esto?
Para el código:
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];
);
para que funcione correctamente, debe asociar la variable "dtParms" con la tabla de datos que contiene los parámetros. Usted declaró que guardó la tabla de datos con el mismo nombre, por lo que supongo que nombró la tabla de datos "Parámetros". Entonces, lo que debe hacer es abrir esa tabla de datos antes de ejecutar el script y agregar al script la siguiente declaración
dtParms = Data Table("Parameters");