次の節では、[結合(Join)]コマンドの使用例を説明します。
行番号に基づいてテーブルを結合すると、2つのテーブルは横に並べて結合されます。新しいテーブルには、特定の列だけを含むように指定しない限り、両方のテーブルからのすべての列が含まれます。
行数の異なるテーブルを結合するには
行数が異なる2つのテーブルを結合すると、新しいテーブルには、両方のテーブル内の行の値がすべて含まれます。
1. [ヘルプ]>[サンプルデータライブラリ]を選択し、「Species1.jmp」と「Species2.jmp」を開きます。
「Species1.jmp」テーブルには2つ、「Species2.jmp」テーブルには4つの行があります。
2. 「Species1.jmp」テーブルから、[テーブル]>[結合(Join)]を選びます。
3. 「'Species1'と結合するテーブル」で「Species2」を選択します。
4. 「対応の指定」で、[行番号で対応]を選択します。
5. [OK]をクリックします。
図6.23 行番号によるテーブルの結合
2行のテーブルと4行のテーブルを結合すると、新しいテーブルは4行になります。
同じ名前の列があるテーブルを結合するには
2つのテーブルに同じ名前の列がある場合、新しいテーブルでは、これらの列の名前は「テーブル名の列名」となります。たとえば、図6.24に示す「Trial1.jmp」と「Trial2.jmp」の各データテーブルから8つの行を1つのテーブルに結合するとします。新しいテーブルに、両方のテーブルからのすべての列が含まれるように結合します。
1. [ヘルプ]>[サンプルデータライブラリ]を選択し、「Trial1.jmp」と「Trial2.jmp」を開きます。
2. 「Trial1.jmp」テーブルから、[テーブル]>[結合(Join)]を選びます。
3. 「'Trial1'と結合するテーブル」で「Trial2」を選択します。
4. 「対応の指定」で、[行番号で対応]を選択します。
5. [OK]をクリックします。
図6.24 元のテーブルと結合後のテーブル
元の2つのテーブルで、列名が同じ場合があります。その場合、出力テーブルの列名には元のテーブルの名前が付加されます。たとえば、新しいテーブルの列名は「テーブル名の<変数名>」というように表示されます。
指定した列だけを結合するには
元のテーブルの列をすべて結合後のテーブルに含める必要がない場合もあります。そのような場合は、次の手順を行います。
1. [ヘルプ]>[サンプルデータライブラリ]を選択し、「Trial1.jmp」と「Trial2.jmp」を開きます。
2. 「Trial1.jmp」テーブルから、[テーブル]>[結合(Join)]を選びます。
3. 「'Trial1'と結合するテーブル」で「Trial2」を選択します。
4. 「対応の指定」で、[行番号で対応]を選択します。
5. [テーブル結合のために列を選択]をクリックし、結合後のテーブルに含める列を指定します。
6. 「元の列」の「Trial1」リストから「コーンの種類」と「収率」を選択し、「Trial2」リストから「収率」を選択します。
両方のテーブルで「コーンの種類」列のデータは同一であるため、いずれか片方の列だけを選択すれば十分です。
7. [選択]をクリックします。
8. [OK]をクリックします。
図6.25 指定した列だけを結合
直積で結合すると、2つの元のデータテーブルの行の可能な組み合わせがすべて含まれた新しいテーブルが作成されます。出力テーブルには、列の値の組み合わせごとに1行が作成されます。
1. [ヘルプ]>[サンプルデータライブラリ]を選択し、「Species1.jmp」と「Species2.jmp」を開きます。
2. 「Species1.jmp」テーブルから、[テーブル]>[結合(Join)]を選びます。
3. 「'Species1'と結合するテーブル」で「Species2」を選択します。
4. 「対応の指定」で、[直積]を選択します。
5. [OK]をクリックします。
図6.26 直積を使ったテーブルの結合
「Species1.jmp」のデータと「Species2.jmp」のデータを組み合わせて新しいテーブルが作成され、値のすべての組み合わせがセットで表示されます。
この例では、[テーブル]>[結合(Join)]コマンドを2回使います。
• 最初の結合では、[直積]オプションを使って、「Oil Amount.jmp」テーブルを「Batch.jmp」テーブルと組み合わせます。
• 2番目の結合では、結果のテーブル(「Oil Amount+Batch」)と「Popcorn Type.jmp」テーブルを組み合わせて、すべてのテーブルを結合した最終的なテーブルを作成します。
1. [ヘルプ]>[サンプルデータライブラリ]を選択し、「Oil Amount.jmp」、「Batch.jmp」、および「Popcorn Type.jmp」を開きます。
2. 「Oil Amount.jmp」テーブルから、[テーブル]>[結合(Join)]を選びます。
3. 「'Oil Amount.jmp'と結合するテーブル」で「Batch」を選択します。
4. 「対応の指定」で、[直積]を選択します。
5. 「出力テーブル名」に「Oil Amount+Batch」と入力します。
6. [OK]をクリックします。
図6.27 結合後の「Oil Amount+Batch」テーブル
結合後のテーブルには、「Oil Amount.jmp」テーブルと「Batch.jmp」テーブルの列がすべて含まれています。次の手順を行い、「Popcorn Type.jmp」の列を追加します。
7. 前の手順で作成した「Oil Amount+Batch」テーブルから、[テーブル]>[結合(Join)]を選びます。
8. 「'Oil Amount+Batch'と結合するテーブル」で「Popcorn Type」を選択します。
9. 「対応の指定」で、[直積]を選択します。
10. [OK]をクリックします。
図6.28 「Oil Amount+Batch」と「Popcorn Type」の結合
最終的なテーブルには、3つのテーブルの列がすべて含まれています。直積で生成される行数は、元のテーブルの行数の積になります。
対応する列の値でデータテーブルを結合する場合は、両方のテーブルに存在する、指定された列の値が検索されます。そして、値が一致する行を結合することにより、新しいデータテーブルが作成されます。
対応する列の値で結合するためには、両方のテーブルの列に同じタイプのデータ(数値、文字、または行の属性)が含まれている必要があります。
重複する値や行をデータテーブルから削除するために、データテーブルをそのテーブル自身に結合するという使い方もできます。
行の順序が異なるテーブルを結合するには
1. [ヘルプ]>[サンプルデータライブラリ]を選択し、「Students1.jmp」と「Students2.jmp」を開きます。
「Students1.jmp」データテーブルには、学生の名前、年齢、性別が記録されています。「Students2.jmp」データテーブルには、学生の名前、身長、体重が記録されています。2つのテーブルを個別に操作する代わりに、両方を組み合わせて1つのテーブルにしてみましょう。両方のテーブルで、学生の名前の並び順は異なっています。たとえば、Aliceは行7と行9にそれぞれ記録されています。
2. 「Students1.jmp」テーブルから、[テーブル]>[結合(Join)]を選びます。
3. 「'Students1'と結合するテーブル」で「Students2」を選択します。
両方のテーブルに同じ値を含む列(「名前」)があるので、それらの列を対応列として指定します。すると、最初のテーブルの「名前」列の各値をもとに、2番目のテーブルの「名前」列に同じ値があるかどうかが調べられます。たとえば、両方のテーブルにAliceという値があることが検出されると、新しいテーブルの「名前」列にAliceという値が挿入され、一方のテーブルからAliceの年齢と性別が、もう一方のテーブルからAliceの身長と体重が取り出され、新しいテーブルに追加されます。
4. 「対応の指定」で、[対応する列の値で結合]を選びます。
5. 「Students1」リストと「Students2」リストから[名前]を選択します。
6. [対応]をクリックします。
7. それぞれの名前について1行ずつのデータのみが必要なため、両方のテーブルの[重複する行を削除]ボックスをオンにします。
8. [OK]をクリックします。
図6.29 結合後のテーブル
異なる行数と列名を持つテーブルを結合するには
サラとジョーは、それぞれポップコーンの実験に取り組んでいます。異なる種類のコーン(グルメとプレーン)を油の量を変えてポップし、でき上がったポップコーンの量(収率)を記録しています。サラは、実験データを「Trial1.jmp」というファイルに、ジョーは、実験データを「Little.jmp」というファイルに保存しました。この2つのテーブルを1つのテーブルに結合してみましょう。
1. [ヘルプ]>[サンプルデータライブラリ]を選択し、「Trial1.jmp」と「Little.jmp」を開きます。
2. 「Trial1.jmp」テーブルから、[テーブル]>[結合(Join)]を選びます。
3. 「'Trial1'と結合するテーブル」ボックスで、「Little」を選択します。
両方のテーブルで、3つの列(「コーンの種類」、「油の量」/「油」、「一回にポップする量」)に記録されている値は同じです。これらの列を対応列として指定します。また、サラとジョーは油の量に関する列に「油の量」と「油」という異なる名前を使っているため、これらを対応列として指定します。
4. [主テーブルの順序を保存]の選択を解除します。
結合後のテーブルは、「Trial1.jmp」でのデータの順ではなく、対応する列で並べ替えられます。
5. 「対応の指定」で、[対応する列の値で結合]を選びます。
6. 「Trial1」リストから「コーンの種類」、「油の量」、「一回にポップする量」を選択します。
7. 「Little」リストから「コーンの種類」、「油」、「一回にポップする量」を選択します。
8. [対応]をクリックします。
2つのデータテーブルを見比べてみると、行数が違うことがわかります。「Trial1.jmp」には8通りの実験条件の組み合わせが揃っていますが、「Little.jmp」には4通りの実験条件の組み合わせしかありません。サラの実験は完了していますが、ジョーの実験はまだ途中です。「Little.jmp」テーブルにはない実験条件の組み合わせも含め、「Trial1.jmp」のすべての行を結合後のテーブルに含めるとします。
9. 両方のテーブルの[一致しない行も含める]チェックボックスをオンにします。
結合後のテーブルには、「コーンの種類」、「油の量」、「一回にポップする量」を、それぞれ1列ずつ含めます。ただし、「収率」については、「Trial1.jmp」と「Little.jmp」のそれぞれの「収率」を表す列を2つ含めます。
10. [テーブル結合のために列を選択]チェックボックスをオンにします。
11. 「Trial1」リストで、すべての列を選択します。
12. [選択]をクリックします。
13. 「Little」リストから「収率」を選択します。
14. [選択]をクリックします。
図6.30 設定後の「結合(Join)」ウィンドウ
15. [OK]をクリックします。
図6.31 「Trial1.jmp」と「Little.jmp」を結合したテーブル
結合後のテーブルは、対応する列で並べ替えられています。「Little.jmp」テーブルの「収率」列(「Littleの収率」)で、「Trial1.jmp」テーブルと一致する値のないセルは欠測値になっています。
テーブルをそのテーブル自体に結合するには(重複行の削除)
1. [ヘルプ]>[サンプルデータライブラリ]を選択し、「Coffee Shop Purchases.jmp」を開きます。
一部の顧客が同じ日に同じ飲料を購入した記録があります。これらの重複行を[結合(Join)]を使って削除します。
2. [テーブル]>[結合(Join)]を選びます。
3. 「'Coffee Shop Purchases'と結合するテーブル」ボックスで、「Coffee Shop Purchases」を選択します。
4. 「対応の指定」で、[対応する列の値で結合]を選びます。
5. 両方の「Coffee Shop Purchases」リストで、すべての列(「日付」、「顧客」、「飲料」)を選択します。
6. [対応]をクリックします。
7. 両方のテーブル(「主テーブル」と「結合するテーブル」)の「重複する行を削除」のチェックボックスをオンにします。
8. 「出力テーブル名」に「Coffee Shop Purchases Final」と入力します。
9. [OK]をクリックします。
図6.32 結合前と結合後の「Coffee Shop Purchases」データテーブル