Hi all, Doc is right.SQL may require multiple steps. And this is to be taken in account when you are dealing with ten of thousands of observations and want to compare all observations from one dataset with all observations from another dataset. This is what we call a cartesian product. "Cartesian Product, you must be out of your mind", some may say. Still, I like the SQL approach. Let's say A is your first dataset and B the second. I would adapt Doc's code like this PROC SQL; * untested code; CREATE TABLE step1 AS SELECT A.Date_Modified, B.Country, SUM( CASE WHEN A.Date_Modified BETWEEN B.Event_date-'0:0:30't AND B.Event_date+'0:0:30't then 1 ELSE 0 ) AS Nb_Selected FROM A, B QUIT; This would give a table like this Date_Modified Country Nb_Selected 30/09/2012 09:45:10 UK 1 30/09/2012 09:45:10 US 1 You may want to test this code with a sample, lets'say 1000 obs from each table with the PROC SQL INOBS options : PROC SQL INOBS=1000; If the intermediary result is not necessary, you may want to CREATE VIEW step1 instead of CREATE TABLE step1 Next, you'll have to transpose the intermediary result PROC TRANSPOSE DATA=step1 OUT=result NAME=Country; VAR Nb_Selected; RUN; to get what you want Date_Modified UK US 30/09/2012 09:45:10 1 1 HTH
... View more