¿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 determinada (por ejemplo, 1 de octubre de 2021 a las 11:00 a. m.).Me referiré a esto como fila n.Obtener valor de col1[fila n].
2 - ir a la fila siguiente, n+1. establecer col2 = col1 [n+1] - col1[n].
3 - ir a la fila siguiente, n+2, establecer col2 = col1 [n+2] - col1[n]
4 - vaya a la fila siguiente, n+3, establezca col2 = col1[ n+3] - col1[n].Continúe recorriendo cada fila subsiguiente hasta fechahora[n+k] = fechahora[n] + 7 días.(Tenga en cuenta que k variará según el incremento de tiempo entre las 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 en los datos col1 que comparen el valor de las 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 las filas han sido procesadas.: )
secuencias de comandosRe: ¿Cómo creo dos bucles anidados?¡Gracias Vince!Esto será útil.Creo que estoy en el camino correcto ahora.: )
Re: ¿Cómo creo dos bucles anidados?Está bien, suena como si estuvieras diciendo
¿Restar el punto de flujo más temprano cada día de cada flujo?¿Eso es lo que estás tratando de hacer?Supongo que porque no creo que las 13:15 a. m. sea una cosa.:D
Names default to here(1);
dt = current data table(); // this assumes your table
// I'm going to make a bunch of extra columns to kind of show you smaller steps
// we really want to be able to say, This is the first row of the day
// so let's make a date column
dt << New Column("Just Date", <<FORMULA></FORMULA>
una vez que tenga la fila más pequeña para el día, solo necesita hacer la última columna nueva, sin embargo, tantas veces para tantas columnas como desee calcular la diferencia.
Espero no haber complicado demasiado las cosas, porque definitivamente no respondí tu pregunta original sobre bucles for anidados.
Re: ¿Cómo creo dos bucles anidados?Acabo de hacer una tabla de muestra de lo que supuse que estabas diciendo.Lo acabo de hacer hoy() + 1 segundo por fila.
No sabía nada sobre su tabla, así que hice que hiciera todas las columnas.
y no puedo entender tu publicación original.
Re: ¿Cómo creo dos bucles anidados?El script produjo una nueva tabla con 5 filas y las siguientes 6 columnas:
semana 1, semana 2, semana 3, comparación de semana 1, comparación de semana 2, comparación de semana 3.
(Las 5 filas eran para fechas del 13/10/2021 8:18:05 a. m. al 13/10/2021 8:18:09 a. m.).
Estoy tratando de terminar con una sola columna nueva en mi tabla existente, una columna con los resultados del cálculo descrito en mi publicación original.Tendría todas las filas de la tabla de datos originales junto con una nueva columna calculada de acuerdo con la descripción en mi publicación original.
Re: ¿Cómo creo dos bucles anidados?Para el contexto, se adjunta mi tabla JMP real si ayuda.(Quiero calcular según la columna "Pred Formula LOG_ECOLI_PEAR".)
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í.
Re: ¿Cómo 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?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: ¿Cómo 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á usando? Parece que una fórmula de columna sería una solución más simple.