以下各节提供使用连接命令的示例。
按行号连接表可并排连接两个表。新表包含两个表中的所有列,除非您指定仅包含特定列。
连接行数不等的表
若要连接的两个表的行数不等,新表将包含在两个表中找到的行的值。
1. 选择帮助 > 样本数据库,然后打开 Species1.jmp 和 Species2.jmp。
请注意 Species1.jmp 表包含两行,Species2.jmp 表包含四行。
2. 从 Species1.jmp 表中,选择表 > 连接。
3. 在与“...”连接的副表框中,选择 Species2。
4. 从匹配方式区域中,选择按行号。
5. 点击确定。
图 6.23 按行号连接的表
若一个包含两行的表与包含四行的表连接,则新表包含四行。
连接具有相同名称的列
若两个表包含的列名相同,新表中的这些列的名称将显示为“表名中的列名”。例如,假定您要将 Trial1.jmp 和 Trial2.jmp 数据表(如图 6.24 所示)中的八行合并为一个表。您希望合并后的新表包含两个表中的所有列。
1. 选择帮助 > 样本数据库,然后打开 Trial1.jmp 和 Trial2.jmp。
2. 从 Trial1.jmp 数据表中,选择表 > 连接。
3. 在与“...”连接的副表框中,选择 Trial2。
4. 从匹配方式菜单中,选择按行号。
5. 点击确定。
图 6.24 原始表和连接表
两个原始表中的列名可能相同。输出列名然后按源表名进行限定。例如,新表中的列名显示为表名称的<变量名称>。
仅连接指定列
假定不想在连接表中包括原始数据表中的所有列。
1. 选择帮助 > 样本数据库,然后打开 Trial1.jmp 和 Trial2.jmp。
2. 从 Trial1.jmp 数据表中,选择表 > 连接。
3. 在与“...”连接的副表框中,选择 Trial2。
4. 从匹配方式菜单中,选择按行号。
5. 点击选择连接表中要包含的列,指定要包括的列的子集。
6. 在“源列”列表中,从 Trial1 列表中选择爆米花和产量,然后从 Trial2 列表中选择产量。
由于两个表中的爆米花列中存在相同的数据,您只需选择一列。
7. 点击选择。
8. 点击确定。
图 6.25 仅连接指定列
执行笛卡尔连接时,JMP 以笛卡尔方式连接两个表:由此创建的新表将包含两个原始表中所有可能的行组合。这将在输出表中创建多种情况,每种列值组合对应一种情况。
1. 选择帮助 > 样本数据库,然后打开 Species1.jmp 和 Species2.jmp。
2. 从 Species1.jmp 表中,选择表 > 连接。
3. 在与“...”连接的副表框中,选择 Species2。
4. 从匹配方式菜单中,选择笛卡尔连接。
5. 点击确定。
图 6.26 使用“笛卡尔连接”连接表
Species1.jmp 中的数据与 Species2.jmp 中的数据交叉以生成连接表,其中显示每个集合中的值的所有组合。
在该示例中,使用表 > 连接命令两次:
• 第一次连接使用笛卡尔选项将 Oil Amount.jmp 表与 Batch.jmp 表合并。
• 第二次连接将生成的表(笛卡尔油量 + 包型)与 Popcorn Type.jmp 表合并,并生成连接所有表的最终表。
1. 选择帮助 > 样本数据库,然后打开 Oil Amount.jmp、Batch.jmp 和 Popcorn Type.jmp。
2. 从 Oil Amount.jmp 表中,选择表 > 连接。
3. 在与“...”连接的副表框中,选择 Batch。
4. 从匹配方式菜单中,选择笛卡尔连接。
5. 在输出表名称下,键入 Oil Amount and Batch。
6. 点击确定。
图 6.27 Oil Amount and Batch 连接表
连接表包含 Oil Amount.jmp 和 Batch.jmp 表中的所有列。添加 Popcorn Type.jmp 列:
7. 从您刚创建的 Oil Amount and Batch 表中,选择表 > 连接。
8. 在与“...”连接的副表框中,选择 Popcorn Type。
9. 从匹配方式菜单中,选择笛卡尔连接。
10. 点击确定。
图 6.28 与 Popcorn Type 连接的 Oil Amount and Batch
最终表包含三个原始表中的所有列。请记住笛卡尔连接生成的行数是原始表中行数的乘积。
当您通过匹配列来连接数据表时,JMP 通过匹配列值来对齐两个表中的行。
警告:若匹配的列未生成唯一行,请小心操作。
注意:
• 用于匹配的列必须具有相同的数据类型(数字、字符或行状态)。
• 您可以将数据表连接到其自身,以便从数据表中删除重复的值或行。
• 您可以使用虚拟连接作为创建新数据表的替代方法。请参见虚拟连接数据表。
使用唯一标识符连接表
您有两个关于热狗信息的文件。第二个文件包含大小这一列,该列未包含在第一个文件中。使用“使用匹配列来连接”来组合数据表。
1. 选择帮助 > 样本数据库,然后打开 Hot Dogs.jmp 和 Hot Dogs2.jmp。
产品名列是数据表中各行的唯一标识符。每个表有 54 个唯一产品名。
2. 从 Hot Dogs 数据表中,选择表 > 连接。
3. 在“与‘Hot Dogs’连接的副表”列表中,选择 Hot Dogs2。
4. 在“匹配方式”区域中选择按匹配列。
5. 从 Hot Dogs 和 Hot Dogs2 列表中,选择产品名称。
6. 点击匹配。
7. 在“选项”中,选择合并具有相同名称的列。使用合并列时,将自动选择“匹配标志”。
8. 选择窗口左下角的保持对话框打开,以便在连接的数据表不符合预期的情况下轻松返回到“连接”窗口。
9. 点击“应用”。
图 6.29 按匹配列连接的表
生成的表现在包含 Hot Dogs2 表中所含的大小列。“匹配标志”列指示所有行的数据都来自这两个表。
连接行数和列名均不同的表
假定 Sarah 和 Joe 要做一个爆米花实验。他们要用不同的油量制作不同类型的爆米花(gourmet 和 plain)。他们记录了产出的爆米花的量(产量)。Sarah 在名为 Trial1.jmp 的文件中给出了第一项试验的数据。Joe 在名为 Little.jmp 的文件中给出了第二项试验的数据。您希望将两个表合并为一个表。
1. 选择帮助 > 样本数据库,然后打开 Trial1.jmp 和 Little.jmp。
2. 从Trial1.jmp 表中,选择表 > 连接。
3. 在与“...”连接的副表框中,选择 Little。
您可以看到有三列(爆米花、油量/油和包型)在两个表中包含相同的值。将这些列标识为匹配列。此外,由于 Sarah 和 Joe 为油和油量列指定了不同的名称,您可以向 JMP 表明油量和油匹配。
4. 取消选择保留主表顺序。
连接的表将按照匹配列而非 Trial1.jmp 中的数据顺序进行排序。
5. 在“匹配方式”区域中选择按匹配列。
6. 从 Trial1 列表中,选择爆米花、油量和包型。
7. 从 Little 列表中,选择爆米花、油和包型。
8. 点击匹配。
查看这两个数据表,您可以看到其中具有不同的行数。Trial1.jmp 具有八个实验条件值,Little.jmp 仅具有其中四个实验条件值。Sarah 完成了她的实验,但 Joe 只是部分完成了他的实验。您希望连接表包含 Trial1.jmp 中的所有行,即使 Little.jmp 表中的行中包含缺失值。
9. 为这两个表选中包含不匹配项框。
在连接的表中,您只想有一列对应爆米花、一列对应油、一列对应包型。但是,您希望有两个产量列:一个代表 Trial1.jmp 的产量,另一个代表 Little.jmp 的产量。
10. 选中选择连接表中要包含的列旁边的框。
11. 从 Trial1 列表中选择所有列。
12. 点击选择。
13. 从 Little 列表中,选择产量。
14. 点击选择。
图 6.30 完成的连接窗口
15. 点击确定。
图 6.31 连接的 Trial1.jmp 和 Little.jmp
连接表按匹配列排序。请注意,来自 Little.jmp 表的产量列(“Little”中的“产量”)具有缺失值,指示没有与 Trial1.jmp 表匹配的值。
将数据表连接到其自身(以删除重复条目)
1. 选择帮助 > 样本数据库,然后打开 Coffee Shop Purchases.jmp。
您可以看到有些客户在同一日期饮用了同一种饮料。您想要使用连接合并这些重复行。
2. 选择表 > 连接。
3. 在与“...”连接的副表框中,选择 Coffee Shop Purchases。
4. 在“匹配方式”区域中选择按匹配列。
5. 从两个 Coffee Shop Purchases 列表中,选择全部三个列:日期、客户和饮料。
6. 点击匹配。
7. 为两个表(主表和副表)同时选择删除重复项框。
8. 为输出表名称键入 Coffee Shop Purchases Final。
9. 点击确定。
图 6.32 原始数据表和连接的 Coffee Shop Purchases 数据表