根据匹配的列和最接近的匹配列连接表你好,
我想合并两张桌子。
我在两列上有完全匹配,并且在另外两列上有最接近的匹配。
每个表的行数不同。
参考排序= 108 行
扫描排序= 193 行
我希望最终的表包含参考表的所有行,108行,+第二个表的匹配数据。
精确匹配列:
1. 行参考=行扫描
2. Col 参考=Col 扫描
最接近匹配的列:
1. X 坐标参考= X 坐标扫描
2. Y 坐标参考= Y 坐标扫描
如果可能的话,我想控制近似值,比如搜索区域。
我尝试了论坛中的其他建议:模糊合并和最近行,但没有得到我想要的结果。
我将非常感激您的帮助。
自动化和脚本基础数据分析与建模数据混合和清理回复:根据匹配的列和最接近的匹配列连接表您能否提供一个您想要的结果的例子?
回复:根据匹配的列和最接近的匹配列连接表你好,
这是我想要的结果的示例。
对于第 14、15 行 -
如果有设置搜索区域的选项,例如 30,那么这些行将没有匹配项并且仅显示参考表数据。
但是如果我们不管搜索区域如何都取最接近的结果,那么我们将看到如所提供的表格中所示的结果。
希望清楚
回复:根据匹配的列和最接近的匹配列连接表这可能会给你一些想法
Names Default To Here(1);
dt_scan = Open("$DOWNLOADS/scan sorted.jmp");
dt_ref = Open("$DOWNLOADS/reference sorted.jmp");
dt_scan << clear select << Clear Column Selection;
dt_ref << clear select << Clear Column Selection;
dt_res = dt_ref << Join(
With(dt_scan),
By Matching Columns(:Col_Reference = :Col_Scan, :Row_Reference = :Row_Scan),
Drop multiples(0, 0),
Include Nonmatches(1, 0),
Preserve main table order(1),
Output Table("Join of reference sorted with scan sorted")
);
dt_res << New Column("Distance", Numeric, Continuous, Formula(
Sqrt(
(:X_Coordinates_Scan - :X_Coordinates_Reference)^2
+
(:Y_Coordinates_Scan - :Y_Coordinates_Reference)^2
);
));
dt_res << Select Where(
:Distance == Col Min(:Distance, :Col_Reference, :Row_Reference, :ID_Reference)
| Is Missing(:ID_SCAN)
);
dt_res << Invert Row Selection;
dt_res << Delete Rows;回复:根据匹配的列和最接近的匹配列连接表感谢您的快速回放。
这很有效。
我试图添加一条语句 - 如果:距离<30,则不显示结果,仅显示参考。
但最终没有得到距离 >30 的结果。
是否有选项可以添加此条件?
回复:根据匹配的列和最接近的匹配列连接表您是如何尝试添加它的?
脚本首先选择每个组和无法连接的行的距离最小的行
dt_res << Select Where(
:Distance == Col Min(:Distance, :Col_Reference, :Row_Reference, :ID_Reference)
| Is Missing(:ID_SCAN)
);
然后它将反转选择并删除那些反转的行
dt_res << Invert Row Selection;
dt_res << Delete Rows;
您可以修改选择条件以在没有反转的情况下工作,或者思考如何在距离限制的情况下考虑反转。