Spezieller Fall der TabellenverbindungAlles,
Ich habe ein spezifisches Problem, das ich lösen kann, und obwohl ich es manuell mit einer winzigen Teilmenge der Originaldaten gelöst habe, kann ich dies nicht mit dem ganzen riesigen Datensatz tun.
Also hier ist das Problem. Ich habe zwei Tische.
Erste Tabelle - einige Messungen an einigen Werkzeugen
| Werkzeug | Datum | Messung |
A001 | 1/1/2017 | 0,005 |
| B006 | 2/2/2017 | 0,003 |
Zweite Tabelle - Verlauf einiger Teile für dieselben Werkzeuge:
| Werkzeug | Datum | Teil S / N |
| A001 | 1/1/2016 | 1234567 |
| B006 | 02.02.2016 | 0987654 |
| A001 | 29.12.2016 | 1234568 |
Was ich gerne sehen würde, wie die Messungen für jedes Werkzeug vom Alter des installierten Teils abhängen. Was ich als Ergebnistabelle brauche, ist dieselbe Tabelle mit Messungen, nur mit wenigen hinzugefügten Spalten:
| Werkzeug | Datum | Messung | Installiertes Teil | Installationsdatum | Alter des Teils |
A001 | 1/1/2017 | 0,005 | 1234568 | 29.12.2016 | 4 Tage |
| B006 | 2/2/2017 | 0,003 | 0987654 | 29.12.2016 | 365 Tage |
Im Grunde habe ich dies manuell für ein Werkzeug gemacht - die Kolonne wurde gerade erstellt und mit dem Ohr gefüllt. Dann wurde die Messtabelle bis zum Datum der nächsten Installation nach unten verschoben - und von dort die gleiche Spalte bis zum Ende mit neuem Installationsdatum gefüllt, dann weiter verschoben .... Langweilig.
Ich muss das irgendwie automatisieren, aber ich kann nicht mal anfangen, meinen Kopf darum zu wickeln.
Daher muss ich für jede Zeile in der Messtabelle eine Zeile in der Ersatzteiletabelle finden, die mit dem Werkzeug übereinstimmt und das Installationsdatum vor dem Datum für die betreffende Zeile hat. Dann müsste ich diese Seriennummer und dieses Datum in die Maßtabelle aufnehmen. Dann ist es einfach, das Alter der Altersteilnehmer zu berechnen. Einige Datumsangaben für die Installation sind so lange her, dass sie nicht von diesen beiden Tabellen abgedeckt werden. Ich habe daher viele fehlende Werte.
Könnte mir jemand mit der Methodik helfen und vielleicht ein bisschen beim Starten des Skripts?
Danke vielmals!
Re: Spezifischer Fall der TabellenverbindungIan,
Sind Sie sicher, dass
Loc(replacedOn[rowsForThisTool] == latestReplacementDate);
ist richtige syntaxis?
Ich meine, ich verstehe, was Sie hier machen wollten, aber es gibt mir Fehler und Syntaxis-Hilfe sagt, dass es Loc (x, y) sein sollte - gibt Ihnen alle Indizes in x, wo es gleich y ist. Nur gleich, keine logische Aussage. Irgendwelche Ideen, wie man diese Aussage umschreibt?
Vielen Dank!
Re: Spezifischer Fall der TabellenverbindungIan,
Glaubst du, dass so etwas funktionieren würde:
currentReplacementDate = Max(replacedOn[rowsForThisTool]<thisDate);
Wo thisDate analog zu diesem Tool ist:
thisDate = currentMeasDate[t];
und currentMeasDate ist nur ein Datum aus der Messtabelle.
Da diese beiden Tabellen von unterschiedlichen Systemen erstellt werden, unterscheiden sich die Datumsformate (y / m / d vs. m / d / y hh: mm: ss oder ähnliches). Muss ich sie irgendwie in eine andere übersetzen, oder wird das automatisch erledigt?
Re: Spezifischer Fall der TabellenverbindungIan,
Vielen Dank für diese ausführliche Antwort.
Schnelle Frage dazu:
latestReplacementDate = Max(replacedOn[rowsForThisTool]);
Der Austausch von Teilen erfolgt regelmäßig während der Messungen. Ich muss also nicht nur das Neueste finden, ich muss das Teil finden, das sich während der Messung auf dem Werkzeug befand. Grundsätzlich muss ich das letzte ErsetzteOn-Datum so finden, dass das Datum der Messung größer ist als das erneuerteOn-Datum. Irgendwelche Vorschläge, wie es am effizientesten und elegantesten geht? Ich habe täglich Daten über Dutzende von Werkzeugen mit Ersatzteilen, die jeden Monat ausgetauscht werden. Daher sollte es effizienter sein. Bislang kann ich nur eine andere Schleife erstellen, in der die Daten einzeln verglichen werden.
Wenn Sie eine etwas elegantere Lösung haben, würde ich das sehr schätzen.
Re: Spezifischer Fall der TabellenverbindungSie könnten so etwas versuchen:
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 ));
Der Code ist ausführlich, um zu versuchen, die verwendete Logik zu zeigen. Bedenken Sie, dass dies nicht getestet wurde und viel verbessert werden könnte: Zum Beispiel werden die "<< getValues ()" nicht benötigt (zumindest in JMP 13).
Re: Spezifischer Fall der TabellenverbindungGenau das habe ich getan. Sah gut aus, bis ich gepostet habe.
Re: Spezifischer Fall der TabellenverbindungSie können eine Tabelle einfügen, indem Sie auf das Tabellensymbol klicken
| 11 |
44 |
222 |
| 333 |
444 |
66 |
| 88 |
55 |
99 |
Re: Spezifischer Fall der TabellenverbindungTut mir leid für hässliche Tabellen - im Bearbeitungsfenster sahen sie OK aus. Es gibt keine Möglichkeit, zum Thema Bearbeiten zurückzukehren, um Tabellen lesbarer zu machen. Ist es überhaupt möglich?
Vielen Dank!