Seleccione el rango de filas alrededor de la fecha de inicio de la entrada del usuarioEstoy trabajando con un gran conjunto de datos que abarca muchos años, que se puede simplificar en dos columnas denominadas "ID" y "Test_date" . La fecha tiene el formato 'm/d/y' y la tabla de datos se ordena cronológicamente. Me gustaría seleccionar todas las filas donde la fecha de la prueba se encuentra dentro de un año (antes o después) de la Test_date especificada por el usuario y luego eliminar todas las demás filas de la tabla de datos.
A continuación se muestra lo que he intentado hasta ahora. Creé los límites de fecha superior e inferior para una ID de entrada, pero no puedo seleccionar las fechas dentro de ese rango usando select where(). En su lugar, aparece el error "El argumento de Seleccionar Dónde no se evaluó como verdadero o falso, es [0]... ". Cualquier ayuda en esto sería muy apreciada.
dt << current data table();
dt << new column("T_YEAR", numeric, continuous, set each value(:Test_date / (365*86400)));
setpoint = ;//user specified numeric value
set_row= dt << get rows where(:ID == setpoint);
set_date = dt:T_YEAR[set_row] ;
set_min = (set_date - 1);
set_max = (set_date + 1);
dt << select where(:T_YEAR >= set_min & :T_YEAR <= set_max )
<< invert row selection
<< delete rows;Re: Seleccione el rango de filas alrededor de la fecha de inicio de la entrada del usuario@doblado , parece que tu respuesta y la mía se superpusieron.
Esto funciona para mí.
dt=open("$SAMPLE_DATA\TechStock.jmp");
set_date=datemdy(12, 15, 2000);
set_min = (set_date - In Days(5));
set_max = (set_date + In Days(5));
dt << select where(:Date >= set_min & :Date <= set_max )
<< invert row selection
<< delete rows;
Tenga en cuenta que tuve que cambiar a En días () en lugar de años solo porque los datos de muestra no tenían más de un año, pero aparte de eso, esto debería funcionar para usted.
Re: Seleccione el rango de filas alrededor de la fecha de inicio de la entrada del usuarioMuchas maneras de hacer esto.
Puedes usar el En años() función para devolver el valor de fecha y hora de JMP para un número de años, o el Incremento de fecha() Función para sumar o restar un número de años.
Además, podría obtener la Año() de su fecha establecida, agregue 1 a eso y use el Fecha MDA() función para darle el valor de la fecha JMP.
set_min = (set_date - In Years(1));
set_max = (set_date + In Years(1));
//or
set_min = Date Increment(set_date, "Year", -1, "actual");
set_max = Date Increment(set_date, "Year", 1, "actual");
//or
set_min = Date MDY( Month( set_date ), Day( set_date ), Year( set_date ) - 1 );
set_max = Date MDY( Month( set_date ), Day( set_date ), Year( set_date ) + 1 );
Re: Seleccione el rango de filas alrededor de la fecha de inicio de la entrada del usuarioSí, eso es esencialmente lo que hice al crear una nueva columna "T_YEAR" con la fecha convertida en años usando Test_date/ (365*86400). He probado ambos, y funciona de cualquier manera. El problema parece ocurrir cuando se usan las variables set_min y set_max en select where() para encontrar todas las filas entre esos valores.
Re: Seleccione el rango de filas alrededor de la fecha de inicio de la entrada del usuarioLas fechas y horas están en unidades de segundos, por lo que deberá hacer algo como esto:
set_min = (set_date - (1 * 365 * 24 * 3600));
set_max = (set_date + (1 * 365 * 24 * 3600));