根據小於或等於參考文件的日期更新表格大家好,
我有 2 個表,其中 dtA 是我的原始文件,dtB 是我的參考文件。 我想做的是根據小於或等於參考文件的日期更新 dtA 。
例如,
表 dtA
| 日期 | 模型 | 數量 |
| 2023年6月24日 | A | 23 |
| 2023年6月30日 | A | 25 |
| 2023年7月1日 | A | 34 |
| 2023年7月5日 | A | 50 |
表 dtB
| 日期 | 模型 | 參考號 |
| 2023年6月1日 | A | 100 |
| 2023年7月1日 | A | 150 |
更新 dtA 後,表格應如下所示
| 日期 | 模型 | 數量 | 參考號 |
| 2023年6月24日 | A | 23 | 100 |
| 2023年6月30日 | A | 25 | 100 |
| 2023年7月1日 | A | 34 | 150 |
| 2023年7月5日 | A | 50 | |
這可能嗎? 請幫忙
自動化和腳本編寫回覆:根據小於或等於參考文件的日期更新表格這是一個有效的腳本。如果賭桌下注很大,效率就不會很高。
鑑於您的 2 個數據表,腳本將提供更新

請注意,第 4 行有一個更新值,而您的表沒有更新值。除非我誤解了您的要求,否則最後一行在參考表中具有滿足選擇標準的值
Names Default To Here( 1 );
New Table( "Original",
Add Rows( 4 ),
New Column( "Date",
Format( "m/d/y", 10 ),
Input Format( "m/d/y" ),
Set Values( [3770409600, 3770928000, 3771014400, 3771360000] )
),
New Column( "Model", Character( 16 ), Set Values( {"A", "A", "A", "A"} ) ),
New Column( "Qty", Set Values( [23, 25, 34, 50] ) )
);
New Table( "Reference",
Add Rows( 2 ),
New Column( "Date",
Numeric,
"Continuous",
Format( "m/d/y", 10 ),
Input Format( "m/d/y" ),
Set Values( [3768422400, 3771014400] )
),
New Column( "Model", Character( 16 ), Set Values( {"A", "A"} ) ),
New Column( "Ref", Set Values( [100, 150] ) )
);
// This is the code that does the actual update
dtA = Data Table( "Original" );
dtB = Data Table( "Reference" );
dtA << New Column( "Ref" );
For Each( {row}, Index( 1, N Rows( dtA ) ),
dtA:Ref[row] = dtB:ref[Max(
dtB << get rows where( dtB:date <= dtA:date[row] )
)]
);回覆:根據小於或等於參考文件的日期更新表格有幾種不同的方法可以執行此操作,但 JMP 不(至少目前)直接提供此類連接。
首先,您可以建立原始表的參考(該表將為空)(此步驟很可能是不必要的,因為 JMP 在連接時會新增缺少的列)

連結表格

按組別和時間排序。 選擇Ref列中的所有值並右鍵點選選擇Fill Missing

選擇缺少 QTY 的所有行並刪除它們


還有一些外掛程式(和腳本)可以執行此加入社群的操作。 您也可以在 JMP 中使用 SQL
回覆:根據小於或等於參考文件的日期更新表格您好,txnelson,它提示這樣的錯誤。

回覆:根據小於或等於參考文件的日期更新表格您很可能正在運行早於 16 的 JMP 版本(For Each 是在 JMP16 中新增的)。 您可以相當容易地修改它並將其更改為 For 循環
回覆:根據小於或等於參考文件的日期更新表格我懷疑您的 JMP 版本不支援
For Each()
因此,如果您將 For Each 部分更改為
For(row=1, row<= N Rows( dtA ), row++,
dtA:Ref[row] = dtB:ref[Max(
dtB << get rows where( dtB:date <= dtA:date[row] )
)]
);
它應該有效。
回覆:根據小於或等於參考文件的日期更新表格腳本現在運作正常,但我還有最後一個問題,有沒有一種方法可以將更新限制在某個日期,因為表格每天都會更新? 例如,
表 dtA
| 日期 | 模型 | 數量 |
| 2023年6月24日 | A | 23 |
| 2023年6月30日 | A | 25 |
| 2023年7月1日 | A | 34 |
| 2023年7月5日 | A | 50 |
| 2023年7月10日 | A | 65 |
| 2023年7月27日 | A | 68 |
表 dtB
| 日期 | 模型 | 參考號 |
| 2023年6月1日 | A | 100 |
| 2023年7月1日 | A | 150 |
| 2023年7月20日 | A | 300 |
| 2023年8月1日 | A | 250 |
更新 dtA 後,表格應如下所示
| 日期 | 模型 | 數量 | 參考號 |
| 2023年6月24日 | A | 23 | 100 |
| 2023年6月30日 | A | 25 | 100 |
| 2023年7月1日 | A | 34 | 150 |
| 2023年7月5日 | A | 50 | 300 |
| 2023年7月10日 | A | 65 | 300 |
| 2023年7月27日 | A | 65 | 250 |
我嘗試使用該腳本,但它用最新的日期 250 覆蓋了過去的日期參考值。 看起來像這樣
| 日期 | 模型 | 數量 | 參考號 |
| 2023年6月24日 | A | 23 | 250 |
| 2023年6月30日 | A | 25 | 250 |
| 2023年7月1日 | A | 34 | 250 |
| 2023年7月5日 | A | 50 | 250 |
| 2023年7月10日 | A | 65 | 250 |
| 2023年7月27日 | A | 65 | 250 |
回覆:根據小於或等於參考文件的日期更新表格討論社群在幫助腳本方面的目的不是成為按需腳本產生來源。它旨在幫助個人解決正在開發的腳本的問題,並提高他們增強自己的腳本的能力。
如果您還沒有花時間閱讀腳本指南,我強烈建議您這樣做。它將向您展示腳本語言的詳細信息,您將從中看到,JSL 是一種完整的腳本語言,幾乎可以處理您可以扔給它的任何內容。但是,對於您目前的問題,您可以輕鬆放置條件「IF()」語句來定義何時應執行或不執行更新。下面是這樣的一個例子
For( row = 1, row <= N Rows( dtA ), row++,
If( dtb:Date == Today(),
If( dtA:date[row] <= Col Max( dtB:date ),
dtA:Ref[row] = dtB:ref[Max(
dtB << get rows where( dtB:date <= dtA:date[row] )
)],
dtA:Ref[row] = .
)
)
);