This is what I would do. Basically expand each row on dataset 2 into 7 rows, to matching 3 days before and after the first dataset. Then you keep observations satisfies the price differences, and then you keep the closest.
** You expand the second dataset;
data DataTwo_c;
set datatwo(rename=(date=date0));
do diff = -3 to 3 by 1;
date = date0 + diff;
output;
end;
* You merge two datasets;
data DataOneTwo;
merge DataOne DataTwo_c(rename=(price=price2));
by date;
if price2 >= 3 * price;
diff = abs(diff);
run;
* you find the closest date;
proc sort data=dateOneTwo; by date diff; run;
data dateOneTwo; set DateOneTwo; by date; if first.date; run;