I would create a long version of my dataset first (something like below, which is untested). And then transpose it, this seems easier because you don't have to know how many days you have ahead of time. Then you can fill in the missing days with the last observation using arrays.
I also haven't worked out the if conditions, but that seems relatively straightforward.
data want;
set have;
end_loop=max(offer_creation, contact_date, acceptdate);
day=0;
do date_ordered=offercreation to end_loop;
*Create if conditions here to assign status to each day;
if date_ordered=offercreation then status=4;
else if ...
;
output;
day+1;
end;
run;