Caso específico de mesas que se unen.Todos,
Tengo un problema específico que resolver, y, aunque lo resolví con éxito en un pequeño subconjunto de datos originales de forma manual, no podré hacer esto con toda la enorme cantidad de datos.
Entonces, aquí está el problema. Tengo dos mesas.
Primera mesa - algunas medidas realizadas en un conjunto de herramientas
| Herramienta | Fecha | Medición |
A001 | 01/01/2017 | 0.005 |
| B006 | 2/2/2017 | 0.003 |
Segunda tabla: historial de reemplazo de algunas piezas en las mismas herramientas:
| Herramienta | Fecha | Parte S / N |
| A001 | 01/01/2016 | 1234567 |
| B006 | 2/2/2016 | 0987654 |
| A001 | 29/12/2016 | 1234568 |
Lo que me gustaría ver, cómo las mediciones para cada herramienta dependen de la antigüedad de la pieza instalada. Lo que necesito como tabla resultante es la misma tabla con medidas, solo con algunas columnas agregadas:
| Herramienta | Fecha | Medición | Parte instalada | Fecha de instalación | Edad de la parte |
A001 | 01/01/2017 | 0.005 | 1234568 | 29/12/2016 | 4 dias |
| B006 | 2/2/2017 | 0.003 | 0987654 | 29/12/2016 | 365 dias |
Básicamente, hice esto manualmente para una herramienta: solo creé la columna y la llené con la oreja; Luego se movió hacia abajo en la tabla de medición hasta la fecha de la próxima instalación, y desde allí se llenó la misma columna hasta el final con la nueva fecha de instalación, luego se avanzó ... Tedioso.
Necesito automatizarlo de alguna manera, pero ni siquiera puedo empezar a envolver mi cabeza alrededor de eso.
Por lo tanto, para cada línea en la tabla de medidas, necesito encontrar una línea en la tabla de reemplazo de piezas, que tenga una herramienta que coincida y tenga una fecha de instalación anterior a la fecha de la línea considerada. Entonces necesitaría tomar ese número de serie, esa fecha y ponerlo en la tabla de medidas. Entonces es fácil calcular la edad parcial. Algunas fechas de instalación de piezas son tan antiguas que no están cubiertas por estas dos tablas, por lo que podría tener muchos valores faltantes.
¿Alguien podría ayudarme con la metodología y quizás un poco comenzar con el guión?
¡Muchas gracias!
Re: Caso específico de tablas que se unen.Ian,
Estás seguro que
Loc(replacedOn[rowsForThisTool] == latestReplacementDate);
es la sintaxis correcta?
Quiero decir que obtengo lo que querías hacer aquí, pero me da un error y la ayuda de sintaxis dice que debería ser Loc (x, y) - te da todos los índices en x donde es igual a y. Igual solo, no hay ninguna declaración lógica. ¿Alguna idea de cómo reescribir esta declaración?
¡Gracias!
Re: Caso específico de tablas que se unen.Ian,
¿Crees que algo como esto funcionaría?
currentReplacementDate = Max(replacedOn[rowsForThisTool]<thisDate);
Donde esta fecha es análoga a esta herramienta:
thisDate = currentMeasDate[t];
y currentMeasDate es solo una fecha de la tabla de mediciones.
Ahora, ya que estas dos tablas son producidas por sistemas diferentes, los formatos de fechas son diferentes (y / m / d vs. m / d / y hh: mm: ss o algo así). ¿Necesito traducir de alguna manera uno a otro, o se hará de forma automática?
Re: Caso específico de tablas que se unen.Ian,
Muchas gracias por una respuesta tan detallada.
Pregunta rápida sobre esto:
latestReplacementDate = Max(replacedOn[rowsForThisTool]);
Reemplazos de piezas se realizan regularmente a medida que van las mediciones. Por lo tanto, no solo tengo que encontrar lo último, sino que también debo encontrar la parte que estaba en la herramienta durante esa medición, lo último no sirve. Básicamente, necesito encontrar la última fecha de reemplazo en la fecha tal que la fecha de medición sea mayor que la fecha de reemplazo. ¿Alguna sugerencia sobre cómo hacerlo de la manera más eficiente y elegante? Tengo años de datos diarios sobre decenas de herramientas con reemplazos de piezas cada mes, así que es mejor que sea eficiente. Hasta el momento solo puedo crear otro bucle que compare las fechas una por una.
Si tiene una solución más elegante fuera de su mente, lo apreciaría mucho.
Re: Caso específico de tablas que se unen.Podrías probar algo como esto:
NamesDefaultToHere(1);
dt1 = DataTable("Measurements On Tools");
dt2 = DataTable("Parts Replaced");
// Get a list of the tools on which measurements were made
toolsUsed = Column(dt1, "Tool") << getValues;
// Get a list of the tools which had one or more parts replaced
toolsWithReplacedPart = Column(dt2, "Tool") << getValues;
// Get the corresponding replacement dates
replacedOn = Column(dt2, "Date") << getValues;
// And the corresponding part numbers
partSN = Column(dt2, "Part SN") << getValues;
// Make a new vector and a list that will be populated via the loop below
dates = J(NRow(dt1), 1, .);
parts = {};
// Loop over each measurement made
for(t=1, t<=NItems(toolsUsed), t++,
thisTool = toolsUsed[t];
// Find the rows in dt2 in which this tool is referenced
rowsForThisTool = Loc(toolsWithReplacedPart, thisTool);
// Find the latest date on which a part was replaced and store it
latestReplacementDate = Max(replacedOn[rowsForThisTool]);
dates[t] = latestReplacementDate;
// Identify the new part used and store it
rowForLatestPart = Loc(replacedOn[rowsForThisTool] == latestReplacementDate);
newPart = partSN[rowsForThisTool][rowForLatestPart];
InsertInto(parts, newPart);
);
// Add the new columns to dt1
dt1 << newColumn("Last Installed Part", Character, Values(parts));
dt1 << newColumn("Installed Date", Numeric, Continuous, Values(dates), Format( "m/d/y", 12 ));
dt1 << New Column( "Age of Part", Numeric, Continuous, Format( ":day:hr:m", 14 ), Formula( :Date - :Installed Date ));
El código es detallado para tratar de mostrar la lógica utilizada. Tenga en cuenta que esto no ha sido probado y podría mejorarse mucho: por ejemplo, los '<< getValues ()' no son necesarios (al menos en JMP 13).
Re: Caso específico de tablas que se unen.Eso es exactamente lo que hice. Se veía bien hasta que publiqué.
Re: Caso específico de tablas que se unen.puede insertar una tabla haciendo clic en el icono de la tabla
| 11 |
44 |
222 |
| 333 |
444 |
66 |
| 88 |
55 |
99 |
Re: Caso específico de tablas que se unen.Por cierto, perdón por las tablas feas, en la ventana de edición se veían bien. No se puede encontrar ninguna forma de volver al tema de edición para hacer que las tablas sean más legibles. ¿Es incluso posible?
¡Gracias!