表格加入的具體情況所有,
我有一個特定的問題要解決,雖然我手動地在一小部分原始數據上成功地解決了它,但我無法對整個龐大的數據集做到這一點。
所以,這就是問題所在。我有兩張桌子。
第一個表 - 在一些工具上完成的一些測量
| 工具 | 日期 | 測量 |
A001 | 2017年1月1日 | 0.005 |
| B006 | 2017年2月2日 | 0.003 |
第二個表 - 在相同工具上替換某些部件的歷史記錄:
| 工具 | 日期 | 部分S / N. |
| A001 | 2016年1月1日 | 1234567 |
| B006 | 2016年2月2日 | 0987654 |
| A001 | 2016年12月29日 | 1234568 |
我想看到的是,每個工具的測量結果取決於安裝的零件年齡。作為結果表,我需要的是與測量相同的表,只有少量添加的列:
| 工具 | 日期 | 測量 | 已安裝的部分 | 安裝日期 | 部分年齡 |
A001 | 2017年1月1日 | 0.005 | 1234568 | 2016年12月29日 | 4天 |
| B006 | 2017年2月2日 | 0.003 | 0987654 | 2016年12月29日 | 365天 |
基本上,我手動為一個工具做了這個 - 只是創建了一個列,並用耳朵填充;最簡單的更換日期。然後向下移動測量表,直到下次安裝的日期 - 從那裡填充相同的列到新的安裝日期結束,然後進一步移動.... 乏味。
我需要以某種方式自動化,但我甚至無法開始繞過它。
因此,對於測量表中的每一行,我需要在零件更換錶中找到一條線,該線具有匹配的工具,並且安裝日期早於所考慮的線的日期。然後我需要獲取該序列號,該日期並將其放入測量表中。然後很容易計算零件年齡。有些部分安裝日期很久以前它們都沒有被這兩個表覆蓋,所以我可能有很多缺失的值。
有人可以用方法幫我,也許有點啟動腳本嗎?
非常感謝!
Re:表加入的具體情況伊恩
你確定嗎?
Loc(replacedOn[rowsForThisTool] == latestReplacementDate);
是正確的語法?
我的意思是我得到你想要在這裡做的事情,但它給了我錯誤和語法幫助說它應該是Loc(x,y) - 給你x中的所有索引,它等於y。僅等於,不是任何邏輯陳述。任何想法如何重寫這句話?
謝謝!
Re:表加入的具體情況伊恩
你覺得這樣的事情會起作用嗎?
currentReplacementDate = Max(replacedOn[rowsForThisTool]<thisDate);
thisDate類似於thisTool:
thisDate = currentMeasDate[t];
和currentMeasDate只是測量表的日期。
現在,由於這兩個表是由不同的系統生成的,因此日期格式不同(y / m / d vs m / d / y hh:mm:ss或類似的東西)。我是否需要以某種方式將一個翻譯成另一個,否則它將自動完成?
Re:表加入的具體情況伊恩
非常感謝這麼詳細的答案。
關於這個的快速問題:
latestReplacementDate = Max(replacedOn[rowsForThisTool]);
隨著測量的進行,定期更換零件。所以我不僅需要找到最新的,我需要在測量過程中找到工具上的零件,簡單的最新版本不會。基本上,我需要找到最新的替換日期,以便測量日期大於repplacedOn日期。關於如何以最有效和優雅的方式做到這一點的任何建議?我每個月左右都會有數十種工具和部件更換的日常數據,因此效率更高 - 到目前為止我只能提出另一個循環比較日期。
如果您有一個更優雅的解決方案,我會非常感激。
Re:表加入的具體情況你可以嘗試這樣的事情:
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 ));
代碼很冗長,試圖顯示所使用的邏輯。請記住,這沒有測試,並且可以得到很大改進:例如,不需要'<< getValues()'(至少在JMP 13中)。
Re:表加入的具體情況這正是我所做的。看起來很好,直到我發布。
Re:表加入的具體情況您可以通過單擊表格圖標來插入表格
| 11 |
44 |
222 |
| 333 |
444 |
66 |
| 88 |
55 |
99 |
Re:表加入的具體情況順便說一句,抱歉醜陋的桌子 - 在編輯窗口他們看起來不錯。找不到任何方法可以返回編輯主題以使表格更具可讀性。它甚至可能嗎?
謝謝!