This one is always a bit tricky. If you ever need to find this again, you would call it last observation carried forward.
data have;
infile datalines delimiter = "," dsd missover;
input ID $ VID Code $ CodeA;
datalines;
1,5,A,1
1,5,B,
2,6,A,1
2,6,B,
2,3,C,
3,4,B,
3,4,C,
;
run;
proc sort data = have;
by id vid code;
run;
data want;
set have;
length vid_codea 3.;
retain vid_codea;
by id vid;
if code = 'A' then codeA = 1;
if first.vid then call missing(vid_codeA);
if not missing(codeA) then vid_codeA = codeA;
run;
ID VID Code CodeA vid_codea
1 5 A 1 1
1 5 B . 1
2 3 C . .
2 6 A 1 1
2 6 B . 1
3 4 B . .
3 4 C . .
... View more