BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
BenBrady
Obsidian | Level 7

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

1 ACCEPTED SOLUTION

Accepted Solutions
RW9
Diamond | Level 26 RW9
Diamond | Level 26

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.

View solution in original post

4 REPLIES 4
ChrisNZ
Tourmaline | Level 20

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

 

BenBrady
Obsidian | Level 7
yes I do need to use proc freq
RW9
Diamond | Level 26 RW9
Diamond | Level 26

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.

SAS Innovate 2025: Register Now

Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!

How to Concatenate Values

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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 4 replies
  • 3618 views
  • 0 likes
  • 4 in conversation