Online File
Rick Aster: Professional SAS Programming Shortcuts: Contents
proc sort data=series; by seq; run; data before (keep=seq before_seq before_v); set series; retain before_seq before_v; if missing(v) then do; if before_seq then output; end; else do; before_seq = seq; before_v = v; end; run; proc sort data=series out=reverse; by descending seq; run; data after (keep=seq after_seq after_v); set reverse; retain after_seq after_v; if missing(v) then do; if after_seq then output; end; else do; after_seq = seq; after_v = v; end; run; proc sort data=after; by seq; run; data interpol (keep=seq v source); merge series before after; by seq; if not missing(v) then do; source = 'A'; * Actual; output; end; else if not missing(before_v) and not missing(after_v) then do; source = 'I'; * Interpolated; v = before_v + (after_v - before_v)* (seq - before_seq)/(after_seq - before_seq); output; end; else do; source = 'X'; * Not available; v = .; output; end; run; title1 'Interpolation'; proc print noobs heading=h; run;