In this particular case, one must do a little gymnastics to fix the beginning and end of the series :
data temp(drop=i first:) first(keep=first:);
set have end=done;
array v{*} v:;
array first{1024} (1024*.);
do i = 1 to dim(v);
if v{i}=0 then call missing (v{i});
else if missing(first{i}) then first{i} = v{i};
end;
output temp;
if done then output first;
run;
proc expand data=temp out=expanded;
id id;
convert v: / method=join;
run;
data want;
if _n_=1 then set first;
set expanded;
array v{*} v:;
array first{*} first:;
do i = 1 to dim(v);
if missing(v{i}) then
if missing(first{i}) then v{i} = 0;
else v{i} = first{i};
else call missing(first{i});
end;
drop i first:;
run;
PG
@art297,
I posted a PROC EXPAND example and another using PROC TRANSREG for good measure.
For further reading I would recommend the following topic from SAS-L:
In this particular case, one must do a little gymnastics to fix the beginning and end of the series :
data temp(drop=i first:) first(keep=first:);
set have end=done;
array v{*} v:;
array first{1024} (1024*.);
do i = 1 to dim(v);
if v{i}=0 then call missing (v{i});
else if missing(first{i}) then first{i} = v{i};
end;
output temp;
if done then output first;
run;
proc expand data=temp out=expanded;
id id;
convert v: / method=join;
run;
data want;
if _n_=1 then set first;
set expanded;
array v{*} v:;
array first{*} first:;
do i = 1 to dim(v);
if missing(v{i}) then
if missing(first{i}) then v{i} = 0;
else v{i} = first{i};
else call missing(first{i});
end;
drop i first:;
run;
PG
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and save with the early bird rate—just $795!
Learn the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.