尊敬的先生/女士,
我有两张表需要连接
两个请求:
要求1)
表 1 每天有多个条目

表 2 每天有 1 个条目

我想加入匹配“参数集名称和时间戳”的表
创建一个这样的表。我怎么做?

要求2)
给定前两个表,我如何连接它们,以便在每个给定的日子我只获得参数 X 的最后一个值,如下所示

有什么想法和建议吗?
谢谢,蒂莫西
您拥有哪个 JMP 版本? 如果您有 JMP17,最简单的方法是打开表格,转到“连接表格”菜单并尝试不同的选项。 请求 1 应该是非常简单的联接,对于请求 2,您可能需要在执行联接之前创建汇总表。
此外,如果您能够为我们提供示例表格(匿名或模拟作品),我们可以为您提供更准确的说明。
我有 JMP 16。我确实在我的帖子中放置了模拟表。你能看到他们吗?
好的,如果您有 JMP16,您将无法访问预览表,但您可以启用“保持对话框打开”选项,这样如果您搞砸了某些事情,对话框仍然打开。
我可以看到图像,但它们并不是真正的表格,因为我无法在 JMP 中打开它们,或者无法将数据带入 JMP。 如果您可以将它们添加为 JMP 表,那就容易多了。
对于选项 2,有一个肮脏的 hack:
Join 总是采用第一个匹配的条目。
所以有了这个选项

- 如果你撤销表顺序(通过降序排序) ,“最后”-(现在:第一个)值将保留。
所以,开放的桌子较少 - 但如果我的承诺是真的,一种奇怪的感觉:)
dt= new table("test", add rows(8),New Column( "Column 1",
set values([1 1 1 1 1 2 2 2])
)
);
dt << New Column( "Rank1", set each value( Col Rank( 1,:Column 1 ) ));
dt2 = dt << Subset( All rows, Selected columns only( 0 ) );
dt2: Rank1 << set name("Rank2");
dt << Sort(By( :Rank1 ),Replace Table,Order( Descending, Descending ));
dt2 << Sort(By( :Rank2 ),Replace Table,Order( Descending, Descending ));
dt << Join(
With( dt2 ),
Merge Same Name Columns,
Match Flag( 0 ),
By Matching Columns( :Column 1 = :Column 1 ),
Drop multiples( 1, 1 ),
Include Nonmatches( 0, 0 ),
Preserve main table order( 0 )
);
谢谢回复。我对创建虚拟专栏有点模糊。你能详细说明一下吗?
非常感谢
创建虚拟列~变换列:
右键单击列表中的一列并选择行/行:

以下是一些需要支持的视觉效果@jthi和@hogi建议
第1期
Tables=>Join 将表 2 连接到表 1

第2期
Tables=>Sort 创建一个虚拟列并将其命名为 Row.......该列的公式为 Row()

然后
表=>连接 将表 1 连接到表 2

这是将运行 2 个问题的 JSL
names default to here(1);
dt1 = New Table( "Table 1",
Add Rows( 6 ),
New Column( "Parameter Set Name",
Character,
Set Values(
{"27109N5", "27109N5", "27109N5", "27109N5", "27109N5", "27109N5"}
)
),
New Column( "Timestamp",
Format( "yyyy-mm-dd", 12 ),
Input Format( "yyyy-mm-dd" ),
Set Values(
[3600115200, 3600115200, 3600201600, 3600201600, 3600201600, 3600201600]
)
),
New Column( "Parameter X",
Set Values( [2.32, 1.21, 1.45, 1.45, 7.89, 2.04] )
)
);
dt2 = New Table( "Table 2",
Add Rows( 2 ),
New Column( "Parameter Set Name",
Character,
Set Values( {"27109N5", "27109N5"} )
),
New Column( "Timestamp",
Format( "yyyy-mm-dd", 12 ),
Input Format( "yyyy-mm-dd" ),
Set Values( [3600115200, 3600201600] )
),
New Column( "Parameter Y",
Format( "Best", 12 ),
Set Values( [21, 22] )
)
);
// Join data tables
// → Data Table( "One to Many" )
Data Table( "Table 1" ) << Join(
With( Data Table( "Table 2" ) ),
Merge Same Name Columns,
By Matching Columns(
:Parameter Set Name = :Parameter Set Name, :Timestamp = :Timestamp
),
Drop multiples( 0, 0 ),
Include Nonmatches( 0, 0 ),
Preserve main table order( 1 ),
Output Table( "One to Many" )
);
// Create the Many to One table
// Sort data table
Data Table( "Table 1" ) << Sort(
By(
:Parameter Set Name,
:Timestamp,
Transform Column( "Row", Formula( Row() ) )
),
Replace Table,
Order( Ascending, Ascending, Descending )
);
// Join Table 1 to Table 2
// Join data tables
// → Data Table( "Many to One" )
Data Table( "Table 2" ) << Join(
With( Data Table( "Table 1" ) ),
Merge Same Name Columns,
By Matching Columns(
:Parameter Set Name = :Parameter Set Name, :Timestamp = :Timestamp
),
Drop multiples( 1, 1 ),
Include Nonmatches( 0, 0 ),
Preserve main table order( 1 ),
Output Table( "Many to One" )
);