公開日: 04/01/2021

データテーブルを横方向に連結する

Join(横方向の連結)は、データテーブルを左右に連結します。

dt << Join( // 主テーブルへメッセージを送る
	With( dataTable ), // 結合するデータテーブル
	Select( columns ), /* 主テーブルで、出力テーブルに
								追加する列を選択する */
	Select With( columns ), /* 結合するデータテーブルで、出力テーブルに
										追加する列を選択する */
	// 結合の方法。ほかにも次のものがある。
	Cartesian join、By Row Number、By matching columns(col1=col2, ...)
	Merge Same Name Columns, // 同名の列をマージ
	Copy Formula( 0 ), // デフォルトはオン。0でオフになる
	Suppress Formula Evaluation( 0 ), // デフォルトはオン。0でオフになる
	Match Flag( 1 ), /* 対応する列の値で結合する場合に、結合後のデータテーブルに「対応フラグ」列を追加する。 */
	Update, /* 主テーブルのデータを、2番目のテーブルの対応するデータで置き換える。 */
	// 各テーブルのオプション:
	Drop Multiples( Boolean, Boolean ), //重複する行を削除
	Include Non Matches( Boolean, Boolean ), // 一致しない行も含める
	Preserve Main Table Order(), // 主テーブルの順序を保持する
	Output Table Name( "name" )); // 出力テーブルの名前

結合を試すために、まず「Big Class.jmp」を2つに分割しましょう。

dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
part1 = dt << Subset(
	Columns( :名前, :年齢, :Name("身長(インチ)") ),
	Output Table Name( "Big Class 1" )
);
part2 = dt << Subset(
	Columns( :名前, :性別, :Name("体重(ポンド)") ),
	Output Table Name( "Big Class 2" )
);

操作を実際の状況に近くするために、part 2の行を並べ替えます。

sortedPart2 = part2 << Sort( By( :名前 ), Output Table Name( "並べ替えたBig Class" ) );

これで、別々の2つの部分に分割され、それぞれの行の順序が異なるデータテーブルができました。2つのデータテーブルは、共通して持つ列の一致によって結合できます。

part1 << Join(
	With( sortedPart2 ),
	By Matching Columns( :名前 == :名前),
	Preserve Main Table Order();
	Output Table Name( "結合" );
);

結果テーブルには、各部分から1つずつ抽出された2つの「名前」変数のコピーがあり、これらを調べるとJoin(結合)の動作を理解できます。Robertの行が4つあることに注意してください。これは、各データテーブルにRobertの行が2つあり(元のテーブルにRobertの行が2つあった)、Join(結合)によってすべての可能な組み合わせが作成されたからです。

ヒント: 結合されたテーブルで元のデータテーブルと同じ順序を維持する(対応のある列で並べ替えるのではなく)には、Preserve Main Table Order()を含めます。このオプションにより、結合プロセスがスピードアップします。

結合の引数についての詳細は、『スクリプト構文リファレンス』のJSLメッセージを参照してください。

より詳細な情報が必要な場合や、質問があるときは、JMPユーザーコミュニティで答えを見つけましょう (community.jmp.com).