FredGIII, I have a somewhat simplistic/bruteforce solution. However we must choose to keep only some measurement combinations. By that I mean, we can: 1) keep all measurements from DAQ, and only those measurements from CONTROLLER that match closest 2) keep all measurements from CONTROLLER, and only those measurements from DAQ that match closest 3) keep matches that fall within a certain time difference criteria. The solution below chose (1): CREATE TEST DATA data daq; format smaple_time datetime24.3; do times=1 to 30000; sample+1; sample_time=round(intnx('seconds', datetime(), 1000*RAND('uniform')) + RAND('uniform'),.01); output; end; drop times; run; data controller; format smaple_time datetime24.3; do times=1 to 1000; sample+1; sample_time=round(intnx('seconds', datetime(), 1000*RAND('uniform')) + RAND('uniform'),.01); output; end; drop times; run; SOLUTION proc sql; create table alignment as select daq.sample as daq_sample, daq.sample_time as daq_sample_time format = datetime24.3, controller.sample as controller_sample, controller.sample_time as controller_sample_time format = datetime24.3, MIN(ABS(daq.sample_time-controller.sample_time)) as min_sample_time_diff from daq, controller group by daq.sample having ABS(daq.sample_time-controller.sample_time) = min(ABS(daq.sample_time-controller.sample_time)); quit; /* Duplicates will arrise when two or more time differences are exactly the same for a given daq_sample ID. */ proc sort data=alignment nodupkey dupout=looky out=alignment; by daq_sample; run; This code will take 10-60 seconds depending on your machine. By the way, it is possible that the same CONTROLLER measurement will be matched to several DAQ measurements depending on when the measurements took place. Let me know what you think. Hope this helps, Huey
... View more