Solved
Contributor
Posts: 23

outputing a frequency count of 0

I have made a variable called age_group which has been dervied from an existing variable age. the variable age_group is split up as follows:

age_group=1 if age<35

age_group=2 if  35<=age<=75

age_group=3 if age>75.

When I run a proc freq on the data, age_group=3 does not appear in the output table because there are 0 observations of this in the data. I am wandering how I can get the proc freq to display a frequency of 0 for age_group=3.

Thanks

Accepted Solutions
Solution
‎08-03-2017 09:25 PM
Super User
Posts: 9,789

Re: outputing a frequency count of 0

Why do you need to use proc freq?  Proc freq provides counts of data which is present.  In most scenarios where I have to do this, then I merge the results back to the distinct list of options:

```proc sql;
create table WANT as
select  COALESCE(A.AGE_GROUP,B.AGE_GROUP) as AGE_GROUP,
case when B.N=. then 0 else B.N end as N
from    (select distinct AGE_GROUP from HAVE) A
full join MEANS_OUTPUT B
on      A.AGE_GROUP=B.AGE_GROUP;
quit;```

However, if you use the right procedure, proc means, then you can use nway (and also multi-label formats if you need to combinations and such like) and do it in one proc means step.

All Replies
PROC Star
Posts: 1,400

Super User
Posts: 2,488

Re: outputing a frequency count of 0

proc freq does not have an easy option for this, but proc means does. Do you need proc freq?

``````data CLASSES;
AGE=30; output;
AGE=60; output;
AGE=90; output;
data HAVE;
AGE=60; output;
AGE=90; output;
proc means data=HAVE classdata=CLASSES nway;
class AGE;
output out=FREQ;
run; ``````

AGE N Obs
30 0
60 1
90 1

Contributor
Posts: 23

Re: outputing a frequency count of 0

yes I do need to use proc freq
Solution
‎08-03-2017 09:25 PM
Super User
Posts: 9,789

Re: outputing a frequency count of 0

Why do you need to use proc freq?  Proc freq provides counts of data which is present.  In most scenarios where I have to do this, then I merge the results back to the distinct list of options:

```proc sql;
create table WANT as
select  COALESCE(A.AGE_GROUP,B.AGE_GROUP) as AGE_GROUP,
case when B.N=. then 0 else B.N end as N
from    (select distinct AGE_GROUP from HAVE) A
full join MEANS_OUTPUT B
on      A.AGE_GROUP=B.AGE_GROUP;
quit;```

However, if you use the right procedure, proc means, then you can use nway (and also multi-label formats if you need to combinations and such like) and do it in one proc means step.

☑ This topic is solved.