It might help a lot if you start by showing the count for one of the Prod_id values in the shown data.
From what we see there are exactly 0 anything for Prod_id = 1011111.
One way would be to create one record for each Prod_id date combination. Your data implies there are no overlaps in the start/end periods for a given Prod_id. Is that actually true? If so then:
data need;
set have;
do date = datepart(start_date) to datepart(end_date);
output;
end;
keep prod_id date;
format date date9.;
run;
proc freq data=need;
tables date;
run;
Caution: if you have lots of Prod_id values with lots of long intervals you might end up with a largish Need data set and take a noticeable amount of time.
I make absolutely no claim to efficiency of time though the code itself is short. If you need a data set then direct the output of the tables statement to a data set with the /out=wantedsetname option.