I have a data with a column of percentages, the column in inconsistent. Some obs are discrete values like X% and some are ranges x % - y%. I have to take average of range obs. How can I do that ? Below is an example of my problem
data _null_;
input pct $;
cards;
15%
5
30
10-15%
;
run;
If below works for you will depend on your actual data.
I've made the assumption that all values are in percent.
data have;
input pct $;
cards;
15%
5
30
10-15%
;
data want(drop=_:);
set have;
length pct_n 8;
pct=compress(pct,' %');
_words=countw(pct,'-');
do _i=1 to _words;
pct_n=sum(pct_n,input(scan(pct,_i,'-'),best32.));
end;
pct_n=pct_n/(100*_words);
format pct_n percent10.1;
run;
If below works for you will depend on your actual data.
I've made the assumption that all values are in percent.
data have;
input pct $;
cards;
15%
5
30
10-15%
;
data want(drop=_:);
set have;
length pct_n 8;
pct=compress(pct,' %');
_words=countw(pct,'-');
do _i=1 to _words;
pct_n=sum(pct_n,input(scan(pct,_i,'-'),best32.));
end;
pct_n=pct_n/(100*_words);
format pct_n percent10.1;
run;
Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!
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.
Ready to level-up your skills? Choose your own adventure.