cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
  • Don’t miss your chance to experience Discovery Summit Europe at our best available rate! Early bird registration through 31 Oct.
  • Image to Table JMP extension imports single or batch images as data tables. Useful to extract curves from pictures or convert image data to curve data to use in analyses like Functional Data Explorer. Download and install the extension.

Discussions

Solve problems, and share tips and tricks with other JMP users.
Choose Language Hide Translation Bar
Rajat
Level IV

Join two tables by matching common column name

Hi,

I have two tables as below.

Table1 :

NameSectionSubject
AdamAMath
BobAscience
ChrisBenglish

 

Table2: 

 

NameSectionScore
AdamA80
BobA90
ChrisB84

 

I want to join both table in jsl and get the following output table but I don't want to give matching column names explicitly. Matching columns would be the columns with same column name in both table. Matching columns can vary. It can be 2 (as in shown example) or 3 or more but matching column would have same column name. 

output:

NameSectionSubjectScore
AdamAMath80
BobAscience90
ChrisBenglish84

 

Thanks :)

1 ACCEPTED SOLUTION

Accepted Solutions
david707
Level III

Re: Join two tables by matching common column name

This should do it:

 

DT1 = New Table("DT1",
	<< Add Rows(3),
	<< New Column("Name", character, Values({"Adam","Bob","Chris"})),
	<< New Column("Section", character, Values({"A","A","B"})),
	<< New Column("Subject", character, Values({"Math","Science","English"}))
);
DT2 = New Table("DT2",
	<< Add Rows(3),
	<< New Column("Name", character, Values({"Adam","Bob","Chris"})),
	<< New Column("Section", character, Values({"A","A","B"})),
	<< New Column("Score", numeric,continous, Values({80,90,84}))
);
LSTcols1 = DT1 << Get Column Names(string);
LSTcols2 = DT2 << Get Column Names(string);

STRjoinCols = "";

For(LVC=1,LVC<=N Items(LSTcols1),LVC++,
	STRcol = LSTcols1[LVC];
	If(
		Contains(LSTCols2,STRcol)
	,
		If(
			STRjoinCols == ""
		,
			STRjoinCols = ":"||STRcol||"==:"||STRcol
		,
			STRjoinCols = STRjoinCols||", :"||STRcol||"==:"||STRcol
		);
	);
);
expr = Eval Insert(
	"\[
	DT3 = DT1 << Join(
				With( DT2 ),
				Merge Same Name Columns,
				Match Flag( 0 ),
				By Matching Columns( ^STRjoinCols^ ),
				Drop multiples( 0, 0 ),
				Include Nonmatches( 0, 0 ),
				Preserve main table order( 0 ),
				Output Table( "DT3" )
	);
	]\"
);
Eval( Parse( expr ) );

View solution in original post

1 REPLY 1
david707
Level III

Re: Join two tables by matching common column name

This should do it:

 

DT1 = New Table("DT1",
	<< Add Rows(3),
	<< New Column("Name", character, Values({"Adam","Bob","Chris"})),
	<< New Column("Section", character, Values({"A","A","B"})),
	<< New Column("Subject", character, Values({"Math","Science","English"}))
);
DT2 = New Table("DT2",
	<< Add Rows(3),
	<< New Column("Name", character, Values({"Adam","Bob","Chris"})),
	<< New Column("Section", character, Values({"A","A","B"})),
	<< New Column("Score", numeric,continous, Values({80,90,84}))
);
LSTcols1 = DT1 << Get Column Names(string);
LSTcols2 = DT2 << Get Column Names(string);

STRjoinCols = "";

For(LVC=1,LVC<=N Items(LSTcols1),LVC++,
	STRcol = LSTcols1[LVC];
	If(
		Contains(LSTCols2,STRcol)
	,
		If(
			STRjoinCols == ""
		,
			STRjoinCols = ":"||STRcol||"==:"||STRcol
		,
			STRjoinCols = STRjoinCols||", :"||STRcol||"==:"||STRcol
		);
	);
);
expr = Eval Insert(
	"\[
	DT3 = DT1 << Join(
				With( DT2 ),
				Merge Same Name Columns,
				Match Flag( 0 ),
				By Matching Columns( ^STRjoinCols^ ),
				Drop multiples( 0, 0 ),
				Include Nonmatches( 0, 0 ),
				Preserve main table order( 0 ),
				Output Table( "DT3" )
	);
	]\"
);
Eval( Parse( expr ) );

Recommended Articles