Here is the solution to retain values on multiple variables and assign the values on the basis of different conditions. The variables may have different or the same conditions.
In this example I've used following conditions: Person_ID eq . var1 eq'' var2 eq ''
But it can be easily changed and adjusted according to your requirement. @data_null__
data have;
infile datalines truncover dsd;
input Person_ID var1 $ var2 $;
datalines;
1,aa,aa1
,,aa2
2,bb,bb
3,cc,cc
4,dd,dd
5,ee,ee
6,ff,ff
7,gg,gg1
,,gg2
,,gg3
8,hh,hh1
,,hh2
,,hh3
;
run;
proc print;
data want;
set have;
retain temp1 temp2 temp3;
if _N_=1 then do;
temp1=Person_ID;
temp2=var1;
temp3=var2;
output;
end;
else do;
/* for Person_ID */
if Person_ID eq . then do;
temp1=temp1;
Person_ID=temp1;
end;
else do;
temp1=Person_ID;
Person_ID=Person_ID;
end;
/* for var1 */
if var1 eq '' then do;
temp2=temp2;
var1=temp2;
end;
else do;
temp2=var1;
var1=var1;
end;
/* for var2 */
if var2 eq '' then do;
temp3=temp3;
var2=temp3;
end;
else do;
temp3=var2;
var2=var2;
end;
output;
temp1=Person_ID;
temp2=var1;
temp3=var2;
end;
drop temp1 temp2 temp3;
run;
proc print;
... View more