¿Cómo creo dos bucles anidados?Hola, estoy intentando escribir un script que siga este flujo de trabajo:
1: comience un bucle en una fecha y hora de inicio determinadas (por ejemplo, 1 de octubre de 2021 a las 11:00 a. M.).Me referiré a esto como fila n.Obtenga el valor de col1 [fila n].
2 - ir a la siguiente fila, n + 1. establezca col2 = col1 [n + 1] - col1 [n].
3 - ir a la siguiente fila, n + 2, establecer col2 = col1 [n + 2] - col1 [n]
4 - ir a la siguiente fila, n + 3, establecer col2 = col1 [n + 3] - col1 [n].Continúe recorriendo cada fila subsiguiente hasta datetime [n + k] = datetime [n] + 7 días.(Tenga en cuenta que k variará según el incremento de tiempo entre filas a medida que avanza el ciclo; por ejemplo, el tiempo aumenta de una fila a la siguiente en 5 minutos, 15 minutos, 1 hora, etc., según la fila en cuestión).
5 - Repita los pasos 1 a 4 para cada nueva semana de datos utilizando una nueva "fecha de inicio" obtenida en el paso 4. Continúe recorriendo otros 7 días de datos.
6 - Repita el paso 5 hasta que la tabla de datos se quede sin filas.
El objetivo es hacer cálculos con datos col1 que comparen el valor de filas de una semana con la primera fila de esa semana, y luego repetir esto una y otra vez para cada semana subsiguiente (semana 2, semana 3, semana 4, etc.) hasta que todos Se han procesado filas.:)
ScriptingRe: ¿como creo dos bucles anidados?¿Puede dar una pequeña tabla de datos con lo que espera que sean los datos?¿O al menos cómo se ve la tabla de datos que estás usando? Parece que una fórmula de columna sería una solución más simple.
Re: ¿como creo dos bucles anidados?Creo que podrías estar diciendo algo como esto.
Names default to here(1);
dt = New Table( "Untitled 1133",
Add Rows( 5 ),
New Column( "Week1",
Numeric,
"Continuous",
Format( "d/m/y h:m:s", 22, 0 ),
Input Format( "d/m/y h:m:s", 0 ),
Set Values( [3716957885, 3716957886, 3716957887, 3716957888, 3716957889] )
),
New Column( "Week2",
Numeric,
"Continuous",
Format( "d/m/y h:m:s", 22, 0 ),
Input Format( "d/m/y h:m:s", 0 ),
Set Values( [3716957885, 3716957886, 3716957887, 3716957888, 3716957889] )
),
New Column( "Week3",
Numeric,
"Continuous",
Format( "d/m/y h:m:s", 22, 0 ),
Input Format( "d/m/y h:m:s", 0 ),
Set Values( [3716957885, 3716957886, 3716957887, 3716957888, 3716957889] )
)
);
nc = ncols(dt);
for(i=1, i<=nc, i++,
col_name = column(i) << Get Name(); // get the original column name
Eval(EvalExpr( // you have to do this so you can substitute in the actual col_name instead of a variable
dt << New Column(col_name || " comparison",
// just take current row minus first row
formula(Expr(column(dt, col_name))[row()]-Expr(column(dt, col_name))[1])
)
));
);
Re: ¿como creo dos bucles anidados?Seguro.Gracias.Se adjunta un fragmento de un conjunto de datos que creé en Excel como ejemplo.
Re: ¿Cómo creo dos bucles anidados?Gracias Vince.Estoy pasando por esto ahora.... como novato de JSL (!) tengo un par de preguntas que me ayudarán a seguir su enfoque.¿Por qué se agregaron 5 filas a una nueva tabla de datos?¿Por qué necesitaba "establecer valores" y por qué se seleccionaron esos cinco números?Su secuencia de comandos es para 3 semanas, pero mi conjunto de datos real tiene alrededor de 120 semanas.
Finalmente, ¿cómo sabe el script qué columna es el valor sobre el cual calcular (es decir, "flujo" en mi ejemplo)?(Mi tabla de datos tiene más columnas que las tres que se muestran en mi ejemplo). ¿No sería más fácil asignar el nombre de la columna en lugar de alternar entre las columnas?Probablemente me estoy perdiendo algo aquí.