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;
Available on demand!
Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.
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.