Вы можете использовать SET для чередования записей. Используйте RETAIN, чтобы сохранить последнюю версию VALUE из первого набора данных. Вы не указали, есть ли у вас отсутствующие значения VALUE, но давайте все равно проверим это.
data want;
set df1(in=in1) df2(in=in2);
by id date ;
retain last_value;
if first.id then last_value=.;
if in1 and not missing(value) then last_value=value;
if in2 and not missing(last_value);
run;
Результат:
last_
Obs id date value value
1 a 2002-01-01 . 2
Обратите внимание, что этот метод принимает значение на или раньше ДАТА во втором наборе данных. Если вы хотите, чтобы оно принимало только последнее значение ПЕРЕД этой датой, измените порядок, в котором два набора данных упоминаются в операторе SET.