I have a dataset that is grouped by category variables in the source data. For example:
Bar | Foo1
| Foo2
| Foo3
Bar2 | Foo4
| Foo5
| Fo
You can retain the non-missing value and apply it to any missing values, e.g.
data want ; set have ; length last $10. ; retain last '' ; if not missing(PARENT) then last = PARENT ; else PARENT = last ; drop last ; run ;
Another way of doing it is to add a dummy variable, then trick SAS by using Update statement.
data have;
infile cards dlm='|';
input (var1 var2) (:$8.);
retain idx 1;
cards;
Bar | Foo1
| Foo2
| Foo3
Bar2 | Foo4
| Foo5
| Foo6
;
data want;
update have (obs=0) have;
by idx;
output;
drop idx;
run;
The lag function returns the last value that was passed to it when it was called, not the value that was last output.
You could do something like the following:
data want;
set have;
length last_parent $256;
retain last_parent;
if parent = "" then parent = last_parent;
else last_parent = parent;
drop last_parent;
run;
You would need to set the length of last_parent to the same length as parent to make sure nothing gets cut off.