Я не много тестировал, но думаю, что все должно работать нормально. Я не эксперт SAS.
Предполагается, что ваши два набора данных названы 'first' и 'second':
/* set unique identifiers */
data first;
set first;
keyida = _N_;
run;
data second;
set second;
keyidb = _N_;
run;
Промежуточный взгляд на данные:
Сначала выглядит так:
study discharg keyida
10011 10/29/2008 1
10011 11/07/2008 2
10011 11/18/2008 3
10011 10/17/2009 4
10011 01/02/2010 5
10011 01/22/2010 6
Второй выглядит так:
study discharg keyidb
10011 10/19/2009 1
10011 01/25/2010 2
Теперь объедините и очистите:
/* merge the data on id and call made after discharge */
proc sql;
create table final as
select a.studyid,
a.discharg,
a.keyida,
b.studyid,
b.call_mad,
b.keyidb
from first a,
second b
where a.studyid = b.studyid and
b.call_mad > a.discharg
order by keyida;
quit;
/* remove duplicates of original dataset */
proc sort data=final nodupkey;
by keyida;
run;
/* sort by secondary id and date of calling */
proc sort data=final;
by call_mad
keyidb;
run;
/* remove duplicates of the secondary dataset */
data final (drop = keyida keyidb);
set final;
by call_mad
keyidb;
if not (last.call_mad and last.keyidb) then call_mad =.;
run;
Окончательный набор данных выглядит так:
study discharg call_mad
10011 10/29/2008 .
10011 11/07/2008 .
10011 10/17/2009 10/19/2009
10011 11/18/2008 .
10011 01/02/2010 .
10011 01/22/2010 01/25/2010