Unirse Pregunta: rango de marca de tiempo, ¿algo así?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Así que tengo una pregunta sobre cómo hacer una combinación para que las filas coincidan un poco con sus marcas de tiempo similares.
Tengo dos tablas, una para datos de defectos, otra para el conteo de obleas a través de una herramienta.Las marcas de tiempo no coinciden y no todas las obleas medidas en una tabla se registran en la otra.
¿Algún consejo sobre cómo unirse a esta tabla para el objetivo final de trazar el recuento de defectos frente al recuento de obleas?
========
1,6 millones de filas, ~6 meses de datos
Tabla 1 - Datos de defectos
Los datos de defectos solo se miden en una pequeña muestra de obleas.
Marcas de tiempo solo para la entrada/salida, por lo que una sola marca de tiempo para todo el lote

Tabla 2 - Recuento de obleas
sellos de tiempo de obleas individuales para una muestra más grande de obleas.
marcas de tiempo únicas para cada oblea

Re: Unirse Pregunta: rango de marca de tiempo, ¿algo así?¡Gracias!
Re: Unirse Pregunta: rango de marca de tiempo, ¿algo así?¡Gracias Vince por compartir el código! ¡Es de mucha ayuda!
Me pregunto si hay alguna manera de unir dos tablas por fecha/hora más cercana y también agrupar por otra cosa, por ejemplo, Tool_ch en este caso. He estado haciendo esto subdividiendo los mismos elementos en ambas tablas, luego los uno por la fecha más cercana y fusiono todo junto. No creo que esta sea una manera eficiente de hacer esto. 
Gracias~
Peng
Re: Unirse Pregunta: rango de marca de tiempo, ¿algo así?Entonces creas una columna llamada como quieras en ambas tablas.
Una tabla, dt1, crea una columna de fila que es solo el número de fila.Luego obtiene los valores como una matriz para cualquier columna a la que intente unirse.
mat = Column(dt1, "Column with the information you want to join") << Get Values;
Luego crea una columna en la otra tabla (dt2) con la fórmula:
Loc Min( Abs( Column( dt2, "Other Join Column" )[Row()] - mat ) );
Lo que esto hará es brindarle la ubicación (fila) donde se encuentra la diferencia mínima entre la fila actual en dt2 y el conjunto completo de valores para dt1.
Luego simplemente unes las dos columnas.
Re: Unirse Pregunta: rango de marca de tiempo, ¿algo así?¡Impresionante!Tendré que hurgar en esto ... todavía soy nuevo en esto y trato de cojear.
¿Hay tablas de datos de muestra a las que esto se aplica y que puedo configurar?
Entonces crea una nueva columna en DT1 y DT2, "Loc Min"
luego se une haciendo coincidir las dos columnas en una nueva tabla
Re: Unirse Pregunta: rango de marca de tiempo, ¿algo así?Graham Blatz realmente habló sobre esto exactamente en la Sesión de Scripting Avanzado en la conferencia JMP este año.Tengo su código de hace un tiempo, pero en realidad lo mejoró usando KDTable(), lo que lo hace increíblemente rápido.
Aquí hay un fragmento de la función que hace las partes más importantes.
dt2 << New Column( "Loc Min", numeric, continuous, formula( Row() ) ); //indexing, basically, to match/update upon
list_big = Column( dt2, rt2 ) << get values; //creates a vector of values for the following
dt1 << New Column( "Loc Min",
numeric,
continuous,
formula(
Loc Min( Abs( Column( rt1 )[Row()] - list_big ) )
)
); //simple, but fast. Very fast.
dt_join = dt1 << Join(
With( dt2 ),
By Matching Columns( :Loc Min = :Loc Min ),
Drop multiples( 0, 1 ),
Name( "Include non-matches" )(0, 0),
Preserve main table order( 1 )
); // I opted for a join rather than an update, for now. may change in the future.
Here's the actual function as well that you can call and has a UI with it.
nearest_neighbor = Function(
//by Graham Blatz
//2/20/15
//Matches Nearest Neighbor of ostensibly dates, but whatever, man
{dt1 = Current Data Table(),
dt2 = Current Data Table(), rt1 = "ReadTime", rt2 = "ReadTime"
},
{DEFAULT LOCAL},
If( dt1 == dt2, //default execution of a prompt, dunno a clean way around this without making some user camp inconvenienced.
list_tables = {};
For( i = 1, i <= N Table(), i++,
Insert Into( list_tables, Data Table( i ) << get name );
); //sets up names of data tables to pick from
dt1 = Data Table( list_tables[1] );
dt2 = Data Table( list_tables[2] ); //Reasonable Starting point
win_tableselect = New Window( "Select Tables",
<<MODAL></MODAL>
Re: Unirse Pregunta: rango de marca de tiempo, ¿algo así?Si, lo siento.Debería haber usado WID.Puedo suponer que ese valor de ranura física se queda con él.L11 Slot4 en la tabla 1 es lo mismo que L11 Slot4 en la tabla 2.
Tengo varias otras columnas coincidentes que puedo usar para aumentar la precisión de la unión, como el número de operación, la receta del proceso, el tipo de producto, etc.
Re: Unirse Pregunta: rango de marca de tiempo, ¿algo así?Supongo que siempre se mantiene la integridad del lote, pero ¿las obleas se barajan alguna vez entre las ranuras? Dicho de otra manera, ¿la fila 4 de la tabla 1 (L22, W10) y la fila 18 de la tabla 2 (L22, W10) corresponden a la misma oblea física?