Caso specifico di unione di tabelleTutti,
Ho un problema specifico da risolvere e, sebbene l'abbia risolto con successo su un piccolo sottogruppo di dati originali manualmente, non sarò in grado di farlo per l'intero enorme insieme di dati.
Quindi, ecco il problema. Ho due tavoli.
Prima tabella: alcune misurazioni eseguite su alcuni set di strumenti
| Strumento | Data | misurazione |
A001 | 2017/01/01 | 0.005 |
| B006 | 2017/02/02 | 0.003 |
Seconda tabella: cronologia di alcune parti di ricambio sugli stessi strumenti:
| Strumento | Data | Parte S / N |
| A001 | 2016/01/01 | 1234567 |
| B006 | 2016/02/02 | 0987654 |
| A001 | 2016/12/29 | 1234568 |
Cosa mi piacerebbe vedere, come le misure per ogni strumento dipendono dall'età della parte installata. Quello che mi serve come tabella risultante è la stessa tabella con le misure, solo con poche colonne aggiunte:
| Strumento | Data | misurazione | Parte installata | Data di installazione | Età della parte |
A001 | 2017/01/01 | 0.005 | 1234568 | 2016/12/29 | 4 giorni |
| B006 | 2017/02/02 | 0.003 | 0987654 | 2016/12/29 | 365 giorni |
Fondamentalmente, l'ho fatto manualmente per uno strumento: ho appena creato una colonna e l'ho riempita con l'orecchio, la data di sostituzione più leggera. Poi spostato verso il basso la tabella di misurazione fino alla data della prossima installazione - e da lì riempito la stessa colonna fino alla fine con la nuova data di installazione, quindi spostato ulteriormente .... Noioso.
Ho bisogno di automatizzarlo in qualche modo, ma non riesco nemmeno a iniziare a capirlo.
Quindi, per ogni riga nella tabella delle misure, ho bisogno di trovare una riga nella tabella di sostituzione delle parti, che abbia lo strumento corrispondente, e abbia la data di installazione precedente alla data della linea considerata. Quindi avrei bisogno di prendere quel numero seriale, quella data e metterlo nella tabella delle misure. Quindi è facile calcolare l'età dei componenti. Alcune parti installano le date sono così tanto tempo fa che non sono coperte da entrambe queste tabelle, quindi potrei avere molti valori mancanti.
Qualcuno potrebbe aiutarmi con la metodologia e forse un po 'con l'avvio della sceneggiatura?
Molte grazie!
Ri: Caso specifico di tabelle che si unisconoIan,
Sei sicuro?
Loc(replacedOn[rowsForThisTool] == latestReplacementDate);
è sintassi corretta?
Voglio dire, ottengo quello che volevi fare qui, ma mi dà errore e l'aiuto della sintassi dice che dovrebbe essere Loc (x, y) - ti dà tutti gli indici in x dove è uguale a y. Solo uguale, nessuna affermazione logica. Qualche idea su come riscrivere questa affermazione?
Grazie!
Ri: Caso specifico di tabelle che si unisconoIan,
Pensi che qualcosa del genere potrebbe funzionare:
currentReplacementDate = Max(replacedOn[rowsForThisTool]<thisDate);
Dove thisDate è analogo a thisTool:
thisDate = currentMeasDate[t];
e currentMeasDate è solo una data dalla tabella di misurazione.
Ora, poiché queste due tabelle sono prodotte da sistemi diversi, i formati delle date sono diversi (y / m / g vs m / g / a h: mm: ss o qualcosa del genere). Devo in qualche modo tradurre l'uno con l'altro, o sarà fatto automaticamente?
Ri: Caso specifico di tabelle che si unisconoIan,
Grazie mille per una risposta così dettagliata.
Domanda veloce su questo:
latestReplacementDate = Max(replacedOn[rowsForThisTool]);
Le sostituzioni delle parti vengono eseguite regolarmente man mano che le misurazioni vanno. Quindi non ho bisogno solo di trovare l'ultima, ho bisogno di trovare la parte che era sullo strumento durante quella misurazione, l'ultima non lo farà. Fondamentalmente, ho bisogno di trovare l'ultima data sostituita in modo tale che la data di misurazione sia maggiore della data repplacedOn. Qualche suggerimento su come farlo in un modo più efficiente ed elegante? Sto avendo anni di dati giornalieri su decine di strumenti con parti sostituite ogni mese o giù di lì, quindi è meglio che sia efficiente - finora posso solo fare un altro ciclo confrontando le date una per una.
Se hai una soluzione più elegante fuori di testa, lo apprezzerei molto.
Ri: Caso specifico di tabelle che si unisconoPotresti provare qualcosa come questo:
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 ));
Il codice è prolisso per cercare di mostrare la logica usata. Tenete a mente che questo non ha avuto alcun test e potrebbe essere molto migliorato: ad esempio, "<< getValues ()" non è necessario (almeno in JMP 13).
Ri: Caso specifico di tabelle che si unisconoQuesto è esattamente quello che ho fatto. Sembrava buono fino a quando non ho postato.
Ri: Caso specifico di tabelle che si unisconopuoi inserire una tabella facendo clic sull'icona della tabella
| 11 |
44 |
222 |
| 333 |
444 |
66 |
| 88 |
55 |
99 |
Ri: Caso specifico di tabelle che si unisconoA proposito, mi dispiace per le tabelle brutte - nella finestra di modifica sembravano OK. Non riesco a trovare alcun modo per tornare alla modifica dell'argomento per rendere le tabelle più leggibili. È persino possibile?
Grazie!