Hi,
I have a data set like this:
data trend;
input tag $ @@;
datalines;
tr-c . . . tr-c tr-tr . .
;
run;
In this data set, I like to assign the missing tag values as the previous value except that after the tag value become the 'tr-tr', all the following missing values should be 'tr'. To make it clear, I like the final data set look like this:
data trend;
input tag $ @@;
datalines;
tr-c tr-c tr-c tr-c tr-c tr-tr tr tr
;
run;
This can be implemented using retain statement and lag function, but I think there should be some smarter way to implement it.
Thanks.
Try this:
data trend;
input tag $ @@;
length _tag $8;
retain _tag ;
_tag=coalescec(tag,_tag);
if missing(tag) then tag=ifc(_tag='tr-tr','tr',_tag);
drop _tag;
datalines;
tr-c . . . tr-c tr-tr . .
;
run;
Haikuo
Try this:
data trend;
input tag $ @@;
length _tag $8;
retain _tag ;
_tag=coalescec(tag,_tag);
if missing(tag) then tag=ifc(_tag='tr-tr','tr',_tag);
drop _tag;
datalines;
tr-c . . . tr-c tr-tr . .
;
run;
Haikuo
Excellent! I never tried this function, always learn something from SAS gurus here.
Thanks Hai.kuo.
Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.
Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.