¿Cómo creo una nueva columna e inserto filas x de texto antes de un 'evento' y filas y después del 'evento'?Hola Comunidad JMP, estoy trabajando con una tabla con miles de filas. En una columna, ciertas filas están marcadas como 'evento' (por ejemplo, un lote fuera de especificación en un día en particular). ¿Cómo puedo crear una nueva columna donde las filas x antes de un 'evento' son marcadores PRE y las filas y después del evento están marcadas POST? En el siguiente ejemplo, x=3 e y=5.
¡Gracias por tu ayuda!

Re: ¿Cómo creo una nueva columna e inserto un texto filas x antes de un 'evento' y filas y después del 'evento'?Excelente, muchas gracias Jim!Re: ¿Cómo creo una nueva columna e inserto un texto filas x antes de un 'evento' y filas y después del 'evento'?Un pequeño ajuste para su lógica adicional y el siguiente JSL creo que le da lo que quiere
If(
:Name( "Column 1 -Existing" )[Row()] == "Event", "Event",
(:Name( "Column 1 -Existing" )[Row() - 1] == "Event" |
:Name( "Column 1 -Existing" )[Row() - 2] == "Event" |
:Name( "Column 1 -Existing" )[Row() - 3] == "Event" |
:Name( "Column 1 -Existing" )[Row() - 4] == "Event" |
:Name( "Column 1 -Existing" )[Row() - 5] == "Event") &
:Name( "Column 1 -Existing" )[Row()] == "", "POST",
(:Name( "Column 1 -Existing" )[Row() + 1] == "Event" |
:Name( "Column 1 -Existing" )[Row() + 2] == "Event" |
:Name( "Column 1 -Existing" )[Row() + 3] == "Event") &
:Name( "Column 1 -Existing" )[Row()] == "", "PRE"
)
Re: ¿Cómo creo una nueva columna e inserto un texto filas x antes de un 'evento' y filas y después del 'evento'?Querido Jim ( @txnelson ) ,
Gracias por ofrecer esta solución, que hace exactamente lo que estaba pidiendo.
Jugando con él, aprendí que pasé por alto un desafío en mi pregunta original: cuando los 'Eventos' se acercan demasiado, las reglas a continuación pueden sobrescribir los resultados anteriores.
¿Hay alguna manera de afinar aún más su solución incorporando las siguientes reglas de priorización?
- 1ra prioridad: Una fila de 'Evento', siempre se copia en la nueva columna como una fila de 'Evento' y no se puede sobrescribir con 'POST' o 'PRE';
- 2da prioridad: un resultado 'POST' nunca puede ser sobrescrito por un 'PRE'
Re: ¿Cómo creo una nueva columna e inserto un texto filas x antes de un 'evento' y filas y después del 'evento'?@pmroz , traté de ejecutar la solución propuesta, pero crea varias tablas nuevas. (en lugar de una nueva columna, en la tabla existente)Re: ¿Cómo creo una nueva columna e inserto un texto filas x antes de un 'evento' y filas y después del 'evento'?Aquí hay una fórmula que es un verdadero método de fuerza bruta.Parece más complejo de lo que realmente es, debido a su elección de tener un signo menos "-" como parte del nombre de la columna, obliga al código a usar la función :Name() alrededor del nombre de la columna.
If(
:Name( "Column 1 -Existing" )[Row() + 1] == "Event" |
:Name( "Column 1 -Existing" )[Row() + 2] == "Event" |
:Name( "Column 1 -Existing" )[Row() + 3] == "Event", "PRE",
:Name( "Column 1 -Existing" )[Row() - 1] == "Event" |
:Name( "Column 1 -Existing" )[Row() - 2] == "Event" |
:Name( "Column 1 -Existing" )[Row() - 3] == "Event" |
:Name( "Column 1 -Existing" )[Row() - 4] == "Event" |
:Name( "Column 1 -Existing" )[Row() - 5] == "Event", "POST",
:Name( "Column 1 -Existing" )[Row()] == "Event", "Event"
)
Se adjunta su tabla de datos de muestra con la nueva columna agregada
Re: ¿Cómo creo una nueva columna e inserto un texto filas x antes de un 'evento' y filas y después del 'evento'?Esto debería hacerlo:
/* Each 'PRE' should start (in this example) 3 rows before the 'Event'-row and
stop 1 row before the 'Event'
Each 'POST' should start 1 row after the event and stop 5 rows after the 'Event'
Thank you! */
dt = New Table( "pre-post example", Add Rows( 23 ),
New Column( "Column 1", Character, "Nominal",
Set Values(
{"", "", "", "", "Event", "", "", "", "", "", "", "", "", "", "", "", "",
"Event", "", "", "", "", ""}
)
),
New Column( "Column 2", Character, "Nominal",
Set Values(
{"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
"", "", "", "", ""}
)
)
);
event_rows = dt << get rows where(dt:Column 1 == "Event");
nr = nrows(event_rows);
if (nr > 0,
for (i = 1, i <= nr, i++,
start_row = maximum(event_rows[i] - 3, 1); // Keep from trying to set a negative row
for (k = start_row, k < event_rows[i] , k++,
dt:column 2[k] = "PRE";
);
end_row = minimum(event_rows[i] + 5, nrows(dt)); // Prevent setting higher rows than are in the table
for (k = event_rows[i] + 1, k <= end_row, k++,
dt:column 2[k] = "POST";
);
dt:column 2[event_rows[i]] = "Event";
);
);Re: ¿Cómo creo una nueva columna e inserto un texto filas x antes de un 'evento' y filas y después del 'evento'?@pmroz Encuentre un breve ejemplo adjunto.
Cada 'PRE' debe comenzar (en este ejemplo) 3 filas antes de la fila 'Evento' y detenerse 1 fila antes del 'Evento'
Cada 'POST' debe comenzar 1 fila después del evento y terminar 5 filas después del 'Evento'
¡Gracias!
Re: ¿Cómo creo una nueva columna e inserto un texto filas x antes de un 'evento' y filas y después del 'evento'?No está claro en su ejemplo cuándo debería comenzar el próximo "PRE".¿Puede proporcionar un pequeño conjunto de datos de ejemplo?