根据小于或等于参考文件的日期更新表格大家好,
我有 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] = .
)
)
);