以下各节提供使用连接命令的示例。
按行号连接表可并排连接两个表。新表包含两个表中的所有列,除非您指定仅包含特定列。
连接行数不等的表
若要连接的两个表的行数不等,新表将包含在两个表中找到的行的值。
1. 选择帮助 > 样本数据库,然后打开 Species1.jmp 和 Species2.jmp。
请注意 Species1.jmp 表包含两行,Species2.jmp 表包含四行。
2. 从 Species1.jmp 表中,选择表 > 连接。
3. 在与“...”连接的副表框中,选择 Species2。
4. 从匹配方式区域中,选择按行号。
5. 点击确定。
图 6.23 按行号连接的表
若一个包含两行的表与包含四行的表连接,则新表包含四行。
连接具有相同名称的列
若两个表包含的列名相同,新表中的这些列的名称将显示为“表名”中的“列名”。例如,假定您要将 Trial1.jmp 和 Trial2.jmp 数据表(如Figure 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. 选择帮助 > 样本数据库,然后打开 Students1.jmp 和 Students2.jmp。
Students1.jmp 数据表包含学生的姓名、年龄和性别。Students2.jmp 数据表包含学生的姓名、身高和体重。您希望将这两个表合并为一个表,而不是对两个单独的表执行操作。请注意,学生姓名在两个表中的顺序是不同的。例如,Alice 分别位于第 7 行和第 9 行中。
2. 从 Students1.jmp 数据表中,选择表 > 连接。
3. 在与“...”连接的副表框中,选择 Students2。
由于两个表都具有包含相同值的姓名列,您需要向 JMP 表明这两列是匹配列。JMP 随后检查第一个表的姓名列中的每个值,确定在第二个表的姓名列中是否有相应值。例如,JMP 检测到两个表中都存在 Alice。JMP 会在新表中创建姓名列,其中包含 Alice 这个值。随后会从第一个表中提取 Alice 的年龄和性别,将其放入新表。接着 JMP 会提取 Alice 的身高和体重,将其放入新表。
4. 在“匹配方式”区域中选择按匹配列。
5. 从 Students1 和 Students2 列表中,选择姓名。
6. 点击匹配。
7. 您希望新表中对每个姓名仅包含一行,所以请为两个表均选中删除重复项框。
8. 点击确定。
图 6.29 连接的表
连接行数和列名均不同的表
假定 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 数据表