- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
proc format;
value agegroup_fmt
low - 10 = '<11'
11, 12 = '11-12'
13-14 = '13-14'
15-16 = '15-16'
17-high = '>16'
;
run;
proc tabulate data=sashelp.class out=want ;
class age / preloadfmt exclusive;
format age agegroup_fmt.;
table age / printmiss misstext='0';
run;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Here's an example with BMI instead;
https://gist.github.com/statgeek/227565537f3dffcd8627f1fe2eff844f
Pretty much the same idea.
Or I believe there's an example here as well, same BMI, but a step by step walk through
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
from sashelp.class data set develop above table
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
What have you tried so far? I don't really feel like doing your homework but I'm happy to help while you're doing it.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
proc sql;
create table wantk as select
case when age<11 then '<11' else
case when age in (11,12) then '11-12' else
case when age in (13,14) then '13-14' else
case when age in (15,16) then '15-16' else
case when age>16 then '>16' else ' ' end
end end end end as agegrp,
count(CALCULATED ageGRP) as count
from sashelp.class group by ageGRP;quit;
data dummy;
input agegrp $ @@;
cards;
<11 11-12 13-14 15-16 >16
;
run;
proc sql;
create table want3 as select dummy.*,wantk.count from dummy as x left join wantk as y on
x.agegrp eq y.agegrp;quit;
proc sql;
create table anser as select
case when count eq . then 0 else count end as count,agegrp
from want3 order by agegrp desc;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Besides the order that looks correct. Is there something else you're looking for?
The answer to your third question is the PRELOADFMT in PROC TABULATE with the MISSING option specified. That would actually do all three at once.
Your current code is SQL, so this would be a very different approach but would take advantage of the automatic SAS processing.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
proc format;
value agegroup_fmt
low - 10 = '<11'
11, 12 = '11-12'
13-14 = '13-14'
15-16 = '15-16'
17-high = '>16'
;
run;
proc tabulate data=sashelp.class out=want ;
class age / preloadfmt exclusive;
format age agegroup_fmt.;
table age / printmiss misstext='0';
run;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
You are been entered in the contest for the least useful thread title of the year. 🙂
Congratulations!
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
I fixed the title -- though the question looks like a homework assignment...