You don't need proc expand for something like this. Instead just provide one record per month, including records for the extended months, but with proportion for the last 3 months taking a missing value:
data have;
input date mmddyy10. proportion ;
format date date9. ;
datalines;
1/4/2019 0.1
1/5/2019 0.2
1/6/2019 0.3
1/7/2019 0.25
1/8/2019 0.5
1/9/2019
1/10/2019
1/11/2019
1/12/2019
run;
data want;
set have;
movavg=mean(coalesce(lag1(proportion),lag1(movavg))
,coalesce(lag2(proportion),lag2(movavg))
,coalesce(lag3(proportion),lag3(movavg))
);
run;
The movavg variables is the mean of 3 values, from the 3 preceding months. If you never had a missing value for proportion, you could do with
movavg=mean(lag1(proportion),lag2(proportion),lag3(proportion));
But the trailng months have no available lagged value for proportion. In those cases, you have told us you want the lagged value of the calculated moving average. That's why I used COALESCE(lagx(proportion),lagx(movavg)), which takes the Xth lag of proportion, except if it is missing, in which case it substitues the Xth lag of movavg.
... View more