<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Merge data by time stamp in Discussions</title>
    <link>https://community.jmp.com/t5/Discussions/Merge-data-by-time-stamp/m-p/34837#M20580</link>
    <description>&lt;P&gt;Jim,&lt;/P&gt;&lt;P&gt;Thanks so much. I think we are all set now.&lt;/P&gt;</description>
    <pubDate>Sun, 22 Jan 2017 18:11:29 GMT</pubDate>
    <dc:creator>michaelclarage</dc:creator>
    <dc:date>2017-01-22T18:11:29Z</dc:date>
    <item>
      <title>Merge data by time stamp</title>
      <link>https://community.jmp.com/t5/Discussions/Merge-data-by-time-stamp/m-p/34821#M20571</link>
      <description>&lt;P&gt;I need to merge two different data sets. The first, A, has data collected every 2 minutes. The second, B, has data collected only when a measurement crossed a threshhold.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;A-sample&lt;/P&gt;&lt;P&gt;2017-01-21:00:02:00, 1, 2, 3, 4&lt;/P&gt;&lt;P&gt;2017-01-21:00:04:00, 2, 3, 4, 5&lt;/P&gt;&lt;P&gt;2017-01-21:00:06:00, 3, 4, 5, 6&lt;/P&gt;&lt;P&gt;...&lt;/P&gt;&lt;P&gt;B-sample&lt;/P&gt;&lt;P&gt;2017-01-21:00:02:05, 4500&lt;/P&gt;&lt;P&gt;2017-01-21:00:05:14, 5700&lt;/P&gt;&lt;P&gt;...&lt;/P&gt;&lt;P&gt;It will be sufficient to put B data into the nearest A row. For example, B-data at 2017-01-21:00:05:14 could be placed into A-row=2017-01-21:00:06:00&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have about 170,000 rows in A; and about 4,000 rows in B.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 21 Jan 2017 05:06:10 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/Merge-data-by-time-stamp/m-p/34821#M20571</guid>
      <dc:creator>michaelclarage</dc:creator>
      <dc:date>2017-01-21T05:06:10Z</dc:date>
    </item>
    <item>
      <title>Re: Merge data by time stamp</title>
      <link>https://community.jmp.com/t5/Discussions/Merge-data-by-time-stamp/m-p/34822#M20572</link>
      <description>&lt;P&gt;&lt;A href="https://community.jmp.com/t5/Discussions/Join-Question-timestamp-range-kinda-sorta/m-p/20828" target="_blank"&gt;https://community.jmp.com/t5/Discussions/Join-Question-timestamp-range-kinda-sorta/m-p/20828&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This will do it or at least get you on the right track. &amp;nbsp;And it's stupidly fast.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 21 Jan 2017 06:28:43 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/Merge-data-by-time-stamp/m-p/34822#M20572</guid>
      <dc:creator>vince_faller</dc:creator>
      <dc:date>2017-01-21T06:28:43Z</dc:date>
    </item>
    <item>
      <title>Re: Merge data by time stamp</title>
      <link>https://community.jmp.com/t5/Discussions/Merge-data-by-time-stamp/m-p/34826#M20573</link>
      <description>&lt;P&gt;thanks for the quick response.&lt;/P&gt;&lt;P&gt;I put a "datetime-in-seconds" column in each table, so all data points have a timestamp.&lt;/P&gt;&lt;P&gt;I run the script, it asks me to choose a column in each table, which I do by selecting the "datetime-in-seconds" column in each table.&amp;nbsp;&lt;/P&gt;&lt;P&gt;The end result is just an additional column in dt2 called "Loc Min" which is simply ascending integers 1,2,3,..&amp;nbsp;&lt;/P&gt;&lt;P&gt;Is the function failing, or am I missing something on how to use it?&lt;/P&gt;</description>
      <pubDate>Sat, 21 Jan 2017 22:35:48 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/Merge-data-by-time-stamp/m-p/34826#M20573</guid>
      <dc:creator>michaelclarage</dc:creator>
      <dc:date>2017-01-21T22:35:48Z</dc:date>
    </item>
    <item>
      <title>Re: Merge data by time stamp</title>
      <link>https://community.jmp.com/t5/Discussions/Merge-data-by-time-stamp/m-p/34828#M20575</link>
      <description>&lt;P&gt;attaching subsets of the files I am using&lt;/P&gt;</description>
      <pubDate>Sun, 22 Jan 2017 05:16:02 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/Merge-data-by-time-stamp/m-p/34828#M20575</guid>
      <dc:creator>michaelclarage</dc:creator>
      <dc:date>2017-01-22T05:16:02Z</dc:date>
    </item>
    <item>
      <title>Re: Merge data by time stamp</title>
      <link>https://community.jmp.com/t5/Discussions/Merge-data-by-time-stamp/m-p/34832#M20579</link>
      <description>&lt;P&gt;There were a couple of items that did not work with the latest version(s) of JMP in the script that was referenced.&amp;nbsp; I reworked them, and removed the requirement to run this as a function call.&amp;nbsp; So all you have to do is to open the 2 data tables and run the script below.&amp;nbsp; I ran it against your data and it worked well.&amp;nbsp; I am not sure the results are exactly what you want, but it will give you a data table you can work from.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;Names Default To Here( 1 );
Clear Symbols();
list_tables = {};


For( i = 1, i &amp;lt;= N Table(), i++,
	Insert Into( list_tables, Data Table( i ) &amp;lt;&amp;lt; get name )
);&amp;nbsp; //sets up names of data tables to pick from
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dt1 = Data Table( list_tables[1] );
dt2 = Data Table( list_tables[2] ); //Reasonable Starting point
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;win_tableselect = New Window( "Select Tables",
	&amp;lt;&amp;lt;modal,
	lup_box = Lineup Box( N Col( 2 ),
		Text Box( "Main Table (i.e. SubID List)", &amp;lt;&amp;lt;set font size( 10 ) ),
		Text Box( "Update-With Table (i.e. Tool Data)", &amp;lt;&amp;lt;set font size( 10 ) ),
		c1 = Combo Box(
			list_tables,
			s1 = c1 &amp;lt;&amp;lt; getselected;
			dt1 = Data Table( s1 );
			vref1[1] &amp;lt;&amp;lt; delete;
			vref1 &amp;lt;&amp;lt; append( //Deletes and redraws
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;				col1 = Col List Box( Data Table( dt1 ), all, maxSelected( 1 ), rt1 = col1 &amp;lt;&amp;lt; get selected )
			);
		), &amp;nbsp; //these parts change the following collistboxes and their fantastic syntax based upon the data table combo box selection
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;		c2 = Combo Box(
			list_tables,
			&amp;lt;&amp;lt;set( 2 ),
			s2 = c2 &amp;lt;&amp;lt; getselected;
			dt2 = Data Table( s2 );
			vref2[1] &amp;lt;&amp;lt; delete;
			vref2 &amp;lt;&amp;lt; append(
				col2 = Col List Box( Data Table( dt2 ), all, maxSelected( 1 ), rt2 = col2 &amp;lt;&amp;lt; get selected )
			);
		), &amp;nbsp; //see above
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;		vref1 = V List Box(
			col1 = Col List Box(
				Data Table( dt1 ), //still stoopdi
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;				all,
				maxSelected( 1 ),
				rt1 = col1 &amp;lt;&amp;lt; get selected
			)
		),
		vref2 = V List Box(
			col2 = Col List Box( Data Table( dt2 ), all, maxSelected( 1 ), rt2 = col2 &amp;lt;&amp;lt; get selected )
		), &amp;nbsp;&amp;nbsp;&amp;nbsp; //the point of the vrefs is to have something to delete without messing with the lineupbox's proclivity for left-right ordering
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;	),
	Text Box( "" ),
	H List Box(
		Button Box( "Ok",
			s1 = c1 &amp;lt;&amp;lt; getselected;
			s2 = c2 &amp;lt;&amp;lt; getselected;
			dt1 = Data Table( s1 );
			dt2 = Data Table( s2 );
			rt1 = Char( (col1 &amp;lt;&amp;lt; get selected)[1] );
			rt2 = Char( (col2 &amp;lt;&amp;lt; get selected)[1] );
		), &amp;nbsp; //not everyone has the &amp;lt;&amp;lt; return result option yet if they're not in 11
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;		Button Box( "Cancel" ), 

	), 

);
If( win_tableselect["Button"] == -1,
	Throw( "Canceled by User" )
);
	
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dt2 &amp;lt;&amp;lt; New Column( "Loc Min", numeric, continuous, formula( Row() ) ); //indexing, basically, to match/update upon
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list_big = Column( dt2, rt2 ) &amp;lt;&amp;lt; get values; //creates a vector of values for the following
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dt1 &amp;lt;&amp;lt; New Column( "Loc Min",
	numeric,
	continuous,
	formula( Loc Min( Abs( Column( rt1 )[Row()] - list_big ) ) )
);&amp;nbsp;&amp;nbsp; //simple, but fast.&amp;nbsp; Very fast.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dt_join = dt1 &amp;lt;&amp;lt; Join(
	With( dt2 ),
	By Matching Columns( :Loc Min = :Loc Min ),
	Drop multiples( 0, 1 ),
	Name( "Include non-matches" )(0, 0),
	Preserve main table order( 1 )
);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dt1 &amp;lt;&amp;lt; delete columns( "Loc Min" );
dt2 &amp;lt;&amp;lt; delete columns( "Loc Min" );&amp;nbsp; //Removes pesky join column
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list_columns = dt_join &amp;lt;&amp;lt; get column names( string );
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;For( i = 1, i &amp;lt;= N Items( list_columns ), i++,
	If( Contains( list_columns, "Loc Min" ),
		Column( dt_join, list_columns ) &amp;lt;&amp;lt; set selected( 1 )
	)
);&amp;nbsp; //the joined table will having lingering Loc Min-like columns.&amp;nbsp; This just hunts them down and removes them.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dt_join &amp;lt;&amp;lt; delete columns;
dt_join &amp;lt;&amp;lt; set name( Char( dt1 &amp;lt;&amp;lt; get name ) || " &amp;amp; " || Char( dt2 &amp;lt;&amp;lt; get name ) );&amp;nbsp; //Good enough
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Return( dt_join );&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sun, 22 Jan 2017 17:04:12 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/Merge-data-by-time-stamp/m-p/34832#M20579</guid>
      <dc:creator>txnelson</dc:creator>
      <dc:date>2017-01-22T17:04:12Z</dc:date>
    </item>
    <item>
      <title>Re: Merge data by time stamp</title>
      <link>https://community.jmp.com/t5/Discussions/Merge-data-by-time-stamp/m-p/34837#M20580</link>
      <description>&lt;P&gt;Jim,&lt;/P&gt;&lt;P&gt;Thanks so much. I think we are all set now.&lt;/P&gt;</description>
      <pubDate>Sun, 22 Jan 2017 18:11:29 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/Merge-data-by-time-stamp/m-p/34837#M20580</guid>
      <dc:creator>michaelclarage</dc:creator>
      <dc:date>2017-01-22T18:11:29Z</dc:date>
    </item>
    <item>
      <title>Re: Merge data by time stamp</title>
      <link>https://community.jmp.com/t5/Discussions/Merge-data-by-time-stamp/m-p/109790#M39701</link>
      <description>&lt;P&gt;How could you modify this JMP script to allow it join two data tables by matching two different variable?&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For example: In the data set below, I would like to match by Experiment # and then match by the local min of the timestamp to join values of data table 2 onto data table 1 such that values of data table 2 is in one row of the nearest timestamp in data table 1 with the correct experiment #.&lt;/P&gt;&lt;P&gt;A-sample&lt;/P&gt;&lt;P&gt;Experiment 1, 2017-01-21:00:02:00, 1, 2, 3, 4&lt;/P&gt;&lt;P&gt;Experiment 1, 2017-01-21:00:04:00, 2, 3, 4, 5&lt;/P&gt;&lt;P&gt;Experiment 2, 2017-01-21:00:06:00, 3, 4, 5, 6&lt;/P&gt;&lt;P&gt;...&lt;/P&gt;&lt;P&gt;B-sample&lt;/P&gt;&lt;P&gt;Experiment 1, 2017-01-21:00:02:05, 4500&lt;/P&gt;&lt;P&gt;Experiment 2, 2017-01-21:00:05:14, 5700&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Any assistance would be helpful!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;</description>
      <pubDate>Mon, 11 Feb 2019 03:15:46 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/Merge-data-by-time-stamp/m-p/109790#M39701</guid>
      <dc:creator>gzhou</dc:creator>
      <dc:date>2019-02-11T03:15:46Z</dc:date>
    </item>
    <item>
      <title>Re: Merge data by time stamp</title>
      <link>https://community.jmp.com/t5/Discussions/Merge-data-by-time-stamp/m-p/109801#M39703</link>
      <description>&lt;P&gt;Here is a modification of the script that I believe will give you what you want.&amp;nbsp; Now, it hasn't been fully tested, since you did not provide sample data tables, but I believe it should work, if the variable you are placing your experiment number into is called "Experiment".&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;Names Default To Here( 1 );
Clear Symbols();
list_tables = {};


For( i = 1, i &amp;lt;= N Table(), i++,
	Insert Into( list_tables, Data Table( i ) &amp;lt;&amp;lt; get name )
);  //sets up names of data tables to pick from
dt1 = Data Table( list_tables[1] );
dt2 = Data Table( list_tables[2] ); //Reasonable Starting point
win_tableselect = New Window( "Select Tables",
	&amp;lt;&amp;lt;modal,
	lup_box = Lineup Box( N Col( 2 ),
		Text Box( "Main Table (i.e. SubID List)", &amp;lt;&amp;lt;set font size( 10 ) ),
		Text Box( "Update-With Table (i.e. Tool Data)", &amp;lt;&amp;lt;set font size( 10 ) ),
		c1 = Combo Box(
			list_tables,
			s1 = c1 &amp;lt;&amp;lt; getselected;
			dt1 = Data Table( s1 );
			vref1[1] &amp;lt;&amp;lt; delete;
			vref1 &amp;lt;&amp;lt; append( //Deletes and redraws
				col1 = Col List Box( Data Table( dt1 ), all, maxSelected( 1 ), rt1 = col1 &amp;lt;&amp;lt; get selected )
			);
		),   //these parts change the following collistboxes and their fantastic syntax based upon the data table combo box selection
		c2 = Combo Box(
			list_tables,
			&amp;lt;&amp;lt;set( 2 ),
			s2 = c2 &amp;lt;&amp;lt; getselected;
			dt2 = Data Table( s2 );
			vref2[1] &amp;lt;&amp;lt; delete;
			vref2 &amp;lt;&amp;lt; append( col2 = Col List Box( Data Table( dt2 ), all, maxSelected( 1 ), rt2 = col2 &amp;lt;&amp;lt; get selected ) );
		),   //see above
		vref1 = V List Box(
			col1 = Col List Box(
				Data Table( dt1 ), //still stoopdi
				all,
				maxSelected( 1 ),
				rt1 = col1 &amp;lt;&amp;lt; get selected
			)
		),
		vref2 = V List Box( col2 = Col List Box( Data Table( dt2 ), all, maxSelected( 1 ), rt2 = col2 &amp;lt;&amp;lt; get selected ) ),     //the point of the vrefs is to have something to delete without messing with the lineupbox's proclivity for left-right ordering
	),
	Text Box( "" ),
	H List Box(
		Button Box( "Ok",
			s1 = c1 &amp;lt;&amp;lt; getselected;
			s2 = c2 &amp;lt;&amp;lt; getselected;
			dt1 = Data Table( s1 );
			dt2 = Data Table( s2 );
			rt1 = Char( (col1 &amp;lt;&amp;lt; get selected)[1] );
			rt2 = Char( (col2 &amp;lt;&amp;lt; get selected)[1] );
		),   //not everyone has the &amp;lt;&amp;lt; return result option yet if they're not in 11
		Button Box( "Cancel" ), 

	), 

);
If( win_tableselect["Button"] == -1,
	Throw( "Canceled by User" )
);
//dt1=data table("AMPERE-concat-cleaned-subset (2)");
//dt2=data table("USGA data 2010 subset (2)");

       
dt2 &amp;lt;&amp;lt; New Column( "Loc Min", numeric, continuous, formula( Row() ) ); //indexing, basically, to match/update upon
//list_big = Column( dt2, rt2 ) &amp;lt;&amp;lt; get values; //creates a vector of values for the following
//rt2 = column( dt2, "date-time-in-seconds");
dt3 = dt2 &amp;lt;&amp;lt; subset( selected rows( 0 ), columns( {"Experiment", "loc min", rt2} ) ); 

// Find out the number of experiments
Current Data Table( dt3 );
Summarize( dt3, experiments = by( :Experiment ) );
If( Column( dt3, "Experiment" ) &amp;lt;&amp;lt; get data type == "Numeric",
	For( i = 1, i &amp;lt;= N Items( experiments ), i++,
		experiments[i] = Num( experiments[i] )
	)
);	

For( i = 1, i &amp;lt;= N Items( experiments ), i++,
	dt3 &amp;lt;&amp;lt; New Column( "__exp__" || Char( experiments[i] ), set each value( . ) );
	theRows = dt3 &amp;lt;&amp;lt; get rows where( :Experiment == experiments[i] );
	For( k = 1, k &amp;lt;= N Rows( theRows ), k++,
		Column( dt3, N Cols( dt3 ) )[theRows[k]] = rt2[theRows[k]]
	);
);

dt3 &amp;lt;&amp;lt; delete columns( 1, 2, 3 );
list_big = dt3 &amp;lt;&amp;lt; get as matrix;

Close( dt3, nosave );
     
dt1 &amp;lt;&amp;lt; New Column( "Loc Min",
	numeric,
	continuous,
	formula(
		whichExp = Loc( experiments, :Experiment );
		Loc Min( Abs( Column( rt1 )[Row()] - list_big[0, whichExp] ) );
	)
);   //simple, but fast.  Very fast.
       
dt_join = dt1 &amp;lt;&amp;lt; Join(
	With( dt2 ),
	By Matching Columns( :Loc Min = :Loc Min ),
	Drop multiples( 0, 1 ),
	Name( "Include non-matches" )(0, 0),
	Preserve main table order( 1 )
);
     
dt1 &amp;lt;&amp;lt; delete columns( "Loc Min" );
dt2 &amp;lt;&amp;lt; delete columns( "Loc Min" );  //Removes pesky join column
list_columns = dt_join &amp;lt;&amp;lt; get column names( string );
       
For( i = 1, i &amp;lt;= N Items( list_columns ), i++,
	If( Contains( list_columns, "Loc Min" ),
		Column( dt_join, list_columns ) &amp;lt;&amp;lt; set selected( 1 )
	)
);  //the joined table will having lingering Loc Min-like columns.  This just hunts them down and removes them.
dt_join &amp;lt;&amp;lt; delete columns;
dt_join &amp;lt;&amp;lt; set name( Char( dt1 &amp;lt;&amp;lt; get name ) || " &amp;amp; " || Char( dt2 &amp;lt;&amp;lt; get name ) );  //Good enough
Return( dt_join );&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 11 Feb 2019 05:20:17 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/Merge-data-by-time-stamp/m-p/109801#M39703</guid>
      <dc:creator>txnelson</dc:creator>
      <dc:date>2019-02-11T05:20:17Z</dc:date>
    </item>
    <item>
      <title>Re: Merge data by time stamp</title>
      <link>https://community.jmp.com/t5/Discussions/Merge-data-by-time-stamp/m-p/109886#M39750</link>
      <description>Thank you so much txnelson! I will test it out.&lt;BR /&gt;&lt;BR /&gt;-gzhou&lt;BR /&gt;</description>
      <pubDate>Mon, 11 Feb 2019 20:29:50 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/Merge-data-by-time-stamp/m-p/109886#M39750</guid>
      <dc:creator>gzhou</dc:creator>
      <dc:date>2019-02-11T20:29:50Z</dc:date>
    </item>
  </channel>
</rss>

