テーブル結合の具体的なケースすべて、
私は解決すべき特定の問題を抱えています、そして私は手動で元のデータのごく一部のサブセットでそれをうまく解決しましたが、私はこれを全データセットにすることはできません。
だから、ここで問題があります。テーブルが2つあります。
最初の表 - いくつかのツールセットで行われた測定
| ツール | 日付 | 測定 |
A001 | 1/1/2017 | 0.005 |
| B006 | 2017/02/02 | 0.003 |
2番目の表 - 同じツールでの部品交換の歴史
| ツール | 日付 | 品番S / N |
| A001 | 1/1/2016 | 1234567 |
| B006 | 2016/02/02 | 0987654 |
| A001 | 2016/12/29 | 1234568 |
私が見たいことは、各ツールの測定値がインストールされている部品の年数にどのように依存するかです。結果テーブルとして必要なものは、測定値のある同じテーブルですが、追加された列はほとんどありません。
| ツール | 日付 | 測定 | 装着部 | 設置日 | 部の年齢 |
A001 | 1/1/2017 | 0.005 | 1234568 | 2016/12/29 | 4日 |
| B006 | 2017/02/02 | 0.003 | 0987654 | 2016/12/29 | 365日 |
基本的に、私はこれを手動で1つのツール用に作成しました - コラムを作成して耳でそれを埋めました;最も古い交換日。それから次のインストールの日まで測定表を下に動かしてください - そしてそこから新しいインストールの日で終わりまで同じ列を埋め、そしてさらに動かしました.... 退屈です。
どういうわけか自動化する必要がありますが、頭を包み込むことすらできません。
そのため、測定表の各行について、ツールと一致し、検討中の行の日付よりも早いインストール日を持つ、部品交換表の行を見つける必要があります。それから私はそのシリアル番号、その日付を取り、それを測定表に入れる必要があるでしょう。それからそれはパート年齢を計算するのは簡単です。一部の部品の設置日があまりにも前であるため、これらの両方の表では説明されていないため、多くの欠損値がある可能性があります。
誰かが方法論を手伝ってくれるかもしれませんし、スクリプトを起動することで少し手を差し伸べるかもしれません。
どうもありがとう!
再結合するテーブルの特定のケースイアン、
よろしいですか
Loc(replacedOn[rowsForThisTool] == latestReplacementDate);
正しい構文は何ですか?
私はあなたがここでやりたいことを手に入れることを意味します、しかしそれは私に誤りを与えそして構文論助けはそれがLoc(x、y)であるべきだと言っています - 等しいだけで、論理ステートメントではありません。この文を書き換える方法はありますか。
ありがとうございます。
再結合するテーブルの特定のケースイアン、
あなたはこのような何かがうまくいくと思いますか:
currentReplacementDate = Max(replacedOn[rowsForThisTool]<thisDate);
thisDateがthisToolの類似物である場合:
thisDate = currentMeasDate[t];
currentMeasDateは、測定テーブルの日付です。
現在、これら2つの表は異なるシステムで作成されているため、日付形式は異なります(y / m / d対m / d / y hh:mm:ssなど)。どういうわけか、あるものを別のものに翻訳する必要がありますか、またはそれは自動的に行われますか?
再結合するテーブルの特定のケースイアン、
そのような詳細な回答をどうもありがとう。
これに関する簡単な質問:
latestReplacementDate = Max(replacedOn[rowsForThisTool]);
測定が進むにつれて、部品の交換は定期的に行われます。それで、私は最新のものを見つけるだけでなく、その測定の間にツールにあった部分を見つける必要があります、単純な最新のものはそうしません。基本的に、測定日がrepplacedOn日よりも大きくなるように、私は最新のReplacedOn日を見つける必要があります。最も効率的でエレガントな方法でそれを行う方法について何か提案はありますか?私は毎月かそこらの部品交換で何十ものツールに関する日々のデータを持っているので、それはより効率的です - 今のところ私は日付を一つずつ比較する別のループを思いつくことができるだけです。
あなたの頭の中からもっとエレガントな解決策があれば、私はこれをとても感謝します。
再結合するテーブルの特定のケースあなたはこのようなことを試すことができます:
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では)。
再結合するテーブルの特定のケースそれこそまさに私がしたことです。私が投稿するまではよさそうでした。
再結合するテーブルの特定のケーステーブルアイコンをクリックしてテーブルを挿入できます
| 11 |
44 |
222 |
| 333 |
444 |
66 |
| 88 |
55 |
99年 |
再結合するテーブルの特定のケースところで、醜いテーブルをごめんなさい - 編集ウィンドウで彼らはOKに見えた。テーブルを読みやすくするためにトピックの編集に戻る方法が見つかりません。それも可能ですか?
ありがとうございます。