Bienvenido a la Comunidad.
Las declaraciones reales que seleccionarán filas dentro de un rango de fechas determinado y crearán una nueva tabla de datos con solo esas filas seleccionadas incluidas.
// Select the row that have the date range desired
dt << select where( :Start Date >= informat("01/10/2025","m/d/y") &
:End Date <= informat("04/30/2025","m/d/y"));
// Create the new table
dtSubset = dt << subset( selected columns(0), selected rows(1), output table("theSubset"));
Aquí hay un ejemplo completo que primero crea una tabla de datos de ejemplo y luego ejecuta las líneas anteriores para seleccionar y crear la tabla de datos.
(Nota: el siguiente ejemplo no se incluyó en la publicación original. Gracias a @jthi por avisarnos sobre la omisión)
Names Default To Here( 1 );
// Create an Example data table
dt = New Table( "Example",
Add Rows( 20 ),
New Column( "Start Date",
Format( "m/d/Y" ),
set each value( Today() + In Days( Random Integer( 1, 100 ) ) )
),
New Column( "End Date",
Format( "m/d/Y" ),
set each value( :Start Date + In Days( Random Integer( 1, 50 ) ) )
)
);
// Select the row that have the date range desired
dt << select where(
:Start Date >= Informat( "01/10/2025", "m/d/y" ) & :End Date <=
Informat( "04/30/2025", "m/d/y" )
);
// Create the new table
dtSubset = dt << subset(
selected columns( 0 ),
selected rows( 1 ),
output table( "theSubset" )
);
Otra forma interesante e interactiva de crear una nueva tabla es utilizar un filtro de datos. El filtro de datos permite al usuario seleccionar filas de la tabla de datos de forma interactiva y, una vez seleccionadas las filas deseadas, se puede crear una nueva tabla a partir de esas filas.
Para esto: Una vez que se muestra la tabla de datos

Vaya al menú desplegable Filas y seleccione "Filtro de datos"

En la ventana Filtro de datos, seleccione las fechas de inicio y finalización y haga clic en el signo +

Luego se mostrarán los filtros.
Haga clic en las casillas de verificación Mostrar e Incluir. Indique la acción que se debe realizar en las filas de la tabla de datos cuando la configuración de los filtros seleccione las filas.

Ahora se pueden configurar los filtros para realizar la selección. Las líneas azules se pueden arrastrar hasta las fechas de inicio y fin deseadas, o se pueden escribir los valores directamente en el área de fecha que se muestra para cada filtro.
Tenga en cuenta cómo se seleccionan las filas de la tabla de datos a medida que se cambian los filtros.

Una vez que se seleccionan las filas deseadas, se puede crear una nueva tabla de datos seleccionando la opción Mostrar subconjunto de la lista de acciones del triángulo rojo Filtro de datos. Simplemente haga clic en el triángulo rojo junto al título Filtro de datos y seleccione la opción


Es muy probable que esto se pueda hacer mucho más simple teniendo en mente su necesidad final, pero como no hay una columna de especificación/resultado exacta, simplemente creé algo que creo que debería ayudarlo a avanzar.
Names Default To Here(1);
dt = Open("$DOWNLOADS/example table.jmp");
Try(Column(dt, "Date 1") << Set Name("date_1"));
date_cols = Filter Each({colname}, dt << Get Column Names("String"),
Starts With(colname, "date_");
);
code_cols = Filter Each({colname}, dt << Get Column Names("String"),
Starts With(colname, "code ");
);
dt << New Column("Result", Character, Multiple Response);
For Each Row(dt,
dates = dt[Row(), date_cols];
between_bin = :"Start date"n <= dates <= :"Stop date"n;
between_idx = Loc(between_bin);
If(N Items(between_idx) > 0,
codes = dt[Row(), code_cols[between_idx]];
valid = Loc(codes);
If(N Items(valid) == 0,
codes = {};
,
codes = As List(codes[valid`]);
);
,
codes = {};
);
res = Transform Each({code}, codes,
Char(code);
);
:Result = Concat Items(res, ", ");
);

El código de Jarmo es espectacular. Disfruto viendo cómo aborda y resuelve los problemas. Pero, durante la mayor parte de mi vida, mis colegas, amigos, cónyuge e hijos me han considerado una persona de ideas extrañas. En los días buenos, se refieren a mí como un "nerd".
Entonces, dada mi posición en la vida, he descubierto que la mayoría de la gente no piensa como yo.
@PruningTheSpark afirma
" Creo que debe ser algún tipo de script, ya que no se me ocurre ninguna fórmula que funcione. No tengo experiencia en la creación de scripts, por lo que cualquier ayuda será apreciada ".
Creo que la mayoría de los usuarios de JMP se encuentran en una posición similar a la de PruningTheSpark. Puede que PruningTheSpark no crea que existe una solución que no requiera scripts para solucionar el problema, pero las capacidades interactivas de JMP para manipular los datos son realmente poderosas. Por eso, a continuación, he recopilado los pasos interactivos necesarios para resolver el problema de PruningTheSparks.
Comenzando con la tabla de datos de muestra que se proporcionó, la modifiqué levemente. Según los resultados del script de Jamo, se ve que ninguna de las filas tiene más de un código válido. Dado que es posible que haya más de un código, agregué un código en la fila 2 que se mostraría para que la fila 2 tenga varios códigos.

La primera tarea es encontrar todos los códigos que se encuentran dentro de la fecha de inicio y la fecha de finalización. Dado que hay 6 columnas de códigos diferentes, la forma más fácil de hacer todo esto a la vez es apilar los datos.
Tablas=>Pila

Es una pila de series múltiples, que replantea las columnas de fecha y código.
Ahora puedo deshacerme de todos los códigos que tienen valores faltantes, ya que no figurarán en los resultados. Por lo tanto, seleccioné una celda que tiene un valor faltante en la columna Datos 2 que contiene todos los códigos y luego hice clic derecho y elegí Seleccionar celdas coincidentes

Que selecciona todas las filas que tienen valores faltantes para la columna Datos 2.
Haga clic derecho en la columna RowState y seleccione Eliminar filas

y solo te quedan las filas que tienen códigos

Ahora necesito determinar cuáles de estos códigos se encuentran dentro de la fecha de inicio y la fecha de finalización. Para ello, simplemente voy a crear una nueva columna, a la que llamaré "entre", que tiene una fórmula de

que tiene un 1 para las filas donde la columna Datos (que contiene la Fecha de la tabla original) tiene un 1 para estar dentro del rango y un 0 para estar fuera del rango

Utilizando la misma técnica que al eliminar los códigos con un valor faltante, se pueden seleccionar y eliminar las filas con ceros.

Para limpiar la tabla, se pueden eliminar algunas de las columnas que ya no se necesitan.

Ahora la tarea es volver a colocar los códigos en filas individuales. Para ello, se puede realizar una división sencilla.
Tablas=>Dividir


Ahora, para combinar las columnas de código en una sola columna, se puede utilizar una Utilidad de columnas llamada Combinar columnas. Simplemente seleccione las columnas que se van a combinar y luego
Cols=>Utilidad=>Combinar columnas

Aparece un cuadro de entrada para completar el nombre de la nueva columna y qué delimitador colocar entre los elementos, en este caso, un ","

Esto da como resultado que la tabla tenga una nueva columna.

Limpiar la tabla eliminando las columnas que ya no se necesitan da

Ahora todo lo que hay que hacer es mover los resultados de nuevo a la tabla de datos original. Para ello, la plataforma de actualización hará el trabajo. Haga clic en la tabla original y
Tablas=>Actualizar

Complete la tabla para obtener la actualización y seleccione hacer coincidir el record_id de la tabla original con el record_id de la tabla Dividir y haga clic en Aceptar y la tabla original contendrá nuestra solución.

No se utilizó ningún script, solo se requirieron 2 columnas de fórmula simples.
Ahora, a medida que se realizan estos pasos, JMP coloca en el registro el JSL necesario para crear los pasos interactivos que se ejecutaron. De modo que uno puede simplemente copiar esos fragmentos de JSL en un script y, al final, tener un script que, cuando se ejecute, generará la solución en un abrir y cerrar de ojos.
names default to here(1);
dt = data table( "Example Table" );
// Stack data table
// → Data Table( "Stacked" )
dtStacked = Data Table( "example table" ) << Stack(
columns(
:date_1, :code 1, :date_2, :code 2, :date_3, :code 3, :date_4, :code 4,
:date_5, :code 5, :date_6, :code 6
),
Number of Series( 2 ),
Output Table( "Stacked" )
);
wait(0);
// Delete selected rows
Data Table( "Stacked" ) << Select Where( Is Missing( :Data 2 ) ) << Delete Rows;
// Delete columns
Data Table( "Stacked" ) << Delete Columns( :Label, :Label 2 );
// New column: is between
Data Table( "Stacked" ) << New Column( "is between",
Numeric,
"Continuous",
Format( "Best", 12 )
);
// Change column formula: is between
Data Table( "Stacked" ):is between << Set Formula(
:Data >= :Start date & :Data <= :Stop date
);
// Delete selected rows
Data Table( "Stacked" ) << Select Where( :is between == 0 ) << delete rows;
// Delete column: is between
Data Table( "Stacked" ) << Delete Columns( :is between );
// Delete columns
Data Table( "Stacked" ) << Delete Columns( :Stop date, :Start date, :Data );
// Split data table
// → Data Table( "Split" )
Data Table( "Stacked" ) << Split(
Split By( :Data 2 ),
Split( :Data 2 ),
Group( :record_id ),
Output Table( "Split" ),
Sort by Column Property
);
// Combine columns
Data Table( "Split" ) << Combine Columns(
columns( :"1"n, :"2"n, :"3"n ),
Column Name( "Result" ),
Delimiter( "," )
);
// Delete columns
Data Table( "Split" ) << Delete Columns( :"1"n, :"2"n, :"3"n );
// Update data table
Data Table( "example table" ) << Update(
With( Data Table( "Split" ) ),
Match Columns( :record_id = :record_id )
);
También se puede abrir un nuevo flujo de trabajo, activar la grabadora y seguir los pasos y terminará con un flujo de trabajo que se puede usar en el futuro para crear la solución.
