diferencias de fecha en dos conjuntos de datosHola,
Tengo dos conjuntos de datos sobre una cohorte de pacientes.Uno tiene fechas de la prueba “a” y el otro tiene fechas de la prueba “b”. el número de pruebas a y b sobre un tema varía (es decir, algunas tienen muchas a y pocas b o viceversa)
Necesito encontrar todos los casos en los que las pruebas a y b se encuentran dentro de un período de tiempo (90 días para este proyecto).¿Cómo podría automatizar la comparación de todas las combinaciones de las pruebas a y b para encontrar las pruebas dentro de este parámetro?Dicho de otra manera, ¿cómo comparo cada fecha de prueba a con todas las fechas de prueba b para calcular una diferencia de fecha (y aislar aquellas <90d)?si obtengo una lista de todas las combinaciones de fecha y diferencia, puedo ordenarlas fácilmente para encontrar aquellas <90d
Ejemplo a continuación
CONJUNTO DE DATOS1
Asunto # Prueba Una fecha
1 1/1/23
1 2/1/23
1 3/1/23
1 4/1/23
2 2/1/10
2 5/1/10
CONJUNTO DE DATOS2
Asunto # Fecha de la prueba B
1 1/1/14
1 6/1/23
1 1/11/22
2 1/1/10
2 1/1/23
2 5/1/23
RESULTADOS
sujeto prueba a fecha prueba b fecha fecha diferencia
1 1/1/23 1/11/22 60d
1 3/1/23 6/1/23 90d
2 1/2/10 1/1/10 30d
Combinación y limpieza de datosRe: diferencias de fechas en dos conjuntos de datosIntentaría unir los conjuntos de datos por tema y luego usar la función de diferencia de fecha para calcular las diferencias entre las pruebas A y las pruebas B.No me queda claro si desea todas las diferencias para todos los pares de pruebas o solo la diferencia mínima o máxima.Si es el mínimo o el máximo, debería poder crear nuevas columnas para las fechas más tempranas y/o más recientes para las pruebas A y B antes de calcular la diferencia de fechas.Si desea todas las diferencias, es posible que deba reestructurar su conjunto de datos (tal vez apilando las columnas de prueba A y prueba B después de unir los conjuntos de datos) antes de calcular las diferencias de fechas.
Re: diferencias de fechas en dos conjuntos de datosSe adjuntan los 3 conjuntos de datos para el ejemplo anterior.No estoy seguro de lo que quiere decir con su tabla de Resultados: hay más coincidencias de las que muestra.Entonces, si es una abreviatura de lo que adjunté, entonces esto debería funcionar para usted.Si realmente solo querías que se mostraran esas 3 coincidencias y diferencias en tus Resultados, entonces no entiendo cómo eliges qué coincidencias deseas.
Re: diferencias de fechas en dos conjuntos de datosYo creo que
Tablas=>Unirse hará lo que quieras.

Aquí hay un script que crea sus 2 tablas de muestra, luego las une y resalta todas las filas con diferencias de fechas superiores a 90.
Names Default To Here( 1 );
dt1 = New Table( "Dataset1",
Add Rows( 6 ),
New Column( "Subject",
Character,
"Nominal",
Set Property( "Value Order", {Numerical Order( 0 )} ),
Set Values( {"1", "1", "1", "1", "2", "2"} )
),
New Column( "Test A Date",
Numeric,
"Nominal",
Format( "m/d/y", 12 ),
Input Format( "m/d/y" ),
Set Property( "Value Order", {Numerical Order( 0 )} ),
Set Selected,
Set Values( [3755376000, 3758054400, 3760473600, 3763152000, 3347827200, 3355516800] )
)
);
dt2 = New Table( "Dataset2",
Add Rows( 6 ),
New Column( "Subject",
Character,
"Nominal",
Set Property( "Value Order", {Numerical Order( 0 )} ),
Set Values( {"1", "1", "1", "2", "2", "2"} )
),
New Column( "Test B Date",
Numeric,
"Nominal",
Format( "m/d/y", 12 ),
Input Format( "m/d/y" ),
Set Property( "Value Order", {Numerical Order( 0 )} ),
Set Selected,
Set Values( [3471379200, 3768422400, 3750105600, 3345148800, 3755376000, 3755721600] )
),
Set Row States( [1, 0, 0, 0, 0, 0] )
);
// The code below is the code that does the work.
dtFinal = dt1 << Join(
With( dt2 ),
Merge Same Name Columns,
Match Flag( 0 ),
By Matching Columns( :Subject = :Subject ),
Drop multiples( 0, 0 ),
Include Nonmatches( 0, 0 ),
Preserve main table order( 1 ),
Output Table( "Final" )
);
dtFinal << New Column( "Date Diff in Days", formula( Abs( :Test A Date - :Test B Date ) / In Days( 1 ) ) );
dtFinal << select where(:Date Diff in Days > 90 );
Re: diferencias de fechas en dos conjuntos de datosObtuve lo mismo que tú, excepto por 2 elementos: calculé la diferencia en meses en lugar de días (un descuido: los días tienen más sentido) y usaste el valor absoluto de la diferencia.Ese factor no está claro en la solicitud: normalmente pensaría que las pruebas son secuenciales (A precede a
, pero dado que varias de las pruebas B precedieron a las pruebas A, supongo que el valor absoluto tiene más sentido.
Re: diferencias de fechas en dos conjuntos de datosMi objetivo es aislar a sujetos para incluirlos en un estudio a quienes se les hayan realizado las pruebas a y b con 90 días de diferencia entre sí.Mis resultados solo enumeran el par de pruebas con <=90d entre ellas, ya que ese sería el resultado deseado.
Re: diferencias de fechas en dos conjuntos de datosEntonces, mi solución o la de txnelson funcionarán (él es el asistente de codificación, yo solo uso mi mouse).Una vez que haya calculado las diferencias de fechas, simplemente elija aquellos < 90 días o cree una columna que identifique esos <90 con un indicador (por ejemplo, 1 frente a 0).
Re: diferencias de fechas en dos conjuntos de datosTambién escribí un complemento que podría usarse para esto (es complicado de usar y automatizarlo puede ser un poco difícil, pero debería ser posible). Unir filas más cercanas: unir tablas utilizando columnas continuas y valores más cercanos . Espero tener tiempo para reescribir esto en algún momento.
La tolerancia se establece en 7776000 ya que las fechas y horas de JMP están en segundos. La dirección de unión es la más cercana, ya que podemos unirnos hacia atrás o hacia adelante.

y del resultado puedes eliminar filas adicionales sin coincidencias

Después de un poco de limpieza

Si sabes SQL, podrías usarlo.
Query(
Table(dt1, "dt1"),
Table(dt2, "dt2"),
"\[SELECT dt1.*, dt2."Test B Date", Abs(dt1."Test A Date" - dt2."Test B Date") / (24*60*60) DeltaDays
FROM dt1
join dt2 on dt1.subject = dt2.subject
where
Abs(dt1."Test A Date" - dt2."Test B Date") <= 90*24*60*60
]\"
);
Pero en este caso creo que usar la solución interactiva de JMP y tomar el script que JMP crea para usted (únase por tema, agregue una nueva columna basada en las diferencias de fechas (el menú contextual puede hacer esto), agregue una segunda columna para verificar si la diferencia es lo suficientemente pequeña , realice la selección basada en eso y elimine filas adicionales). Ambos @txnelson y @dale_lehman más o menos sugirió esto
Unirse:

Agregar la primera columna de cormula

Añadiendo una segunda fórmula

Seleccione 0 filas y elimínelas

Resultado final

Script creado por JMP (esto debería limpiarse un poco, buena publicación al respecto) Mejor migración JSL más fluida: cómo arreglar su propio código )
