BookmarkSubscribeRSS Feed
renjithr
Quartz | Level 8

Hi ,

I got the below code a from a co-worker of mine and I am trying to count the male and female age categories in the below order. The problem with the below code is that if the male of female's age is greater than 18 and less than 64 or greater than 65 and above it is not counted twice.

I want to capture the count of the age of the female in the correct age category f18-44 ,f44-54, f 55-64 and f18-64 and also in f18-64.

eg: if the age of female is 55, the I want the varibales f55-64 and f18-64 to be populated as 1.

The same needs to happen for  males and the age category f65 and above & m65 and above. Please help.

Sample code:

data step5_a(drop=i);

        merge one(in=a) mbr__span(in=b);

   by member;

   if a and b;

     attrib f18_44 length=3 label='Females, Age 18 to 44'

            f45_54 length=3 label='Females, Age 45 to 54'

            f55_64 length=3 label='Females, Age 55 to 64'

            f65_74 length=3 label='Females, Age 65 to 74'

            f75_84 length=3 label='Females, Age 75 to 84'

            f85_UP length=3 label='Females, Age 85 and UP'

  f18_64 length=3 label='Females, Age 18 and 64'

  f65_UP length=3 label='Females, Age 65 and UP'

            m18_44 length=3 label='Males, Age 18 to 44'

            m45_54 length=3 label='Males, Age 45 to 54'

            m55_64 length=3 label='Males, Age 55 to 64'

            m65_74 length=3 label='Males, Age 65 to 74'

            m75_84 length=3 label='Males, Age 75 to 84'

            m85_UP length=3 label='Males, Age 85 and UP'

  m18_64 length=3 label='Males, Age 18 and 64'

  m65_UP length=3 label='Males, Age 65 and UP' ;

    array ag(*) f18_44--m65_UP;

   age=int(intck('month',&dob,&dis_dt)/12);

     if &sex not in ('F' 'M') or age lt -1 then agegp=0;

        else if age ge 18 and age le 44 then agegp=1+8*(&sex='M');

        else if age ge 45 and age le 54 then agegp=2+8*(&sex='M');

        else if age ge 55 and age le 64 then agegp=3+8*(&sex='M');

        else if age ge 65 and age le 74 then agegp=4+8*(&sex='M');

        else if age ge 75 and age le 84 then agegp=5+8*(&sex='M');

        else if age ge 85               then agegp=6+8*(&sex='M');

  else if age ge 18 and age le 64 then agegp=7+8*(&sex='M');

  else if age ge 65               then agegp=8+8*(&sex='M');

     do i=1 to dim(ag);

        if agegp=i then ag(i)=1;

        else ag(i)=0;

     end;

   

run;

2 REPLIES 2
ballardw
Super User

These lines

else if age ge 18 and age le 64 then agegp=7+8*(&sex='M'); 

  else if age ge 65               then agegp=8+8*(&sex='M');

are basically never going to execute as the conditions are met in the previous else clauses.

In your use of these variables do you really need variables or are willing to accept a report table with appropriate headings?

Also, why macro variables SEX, dob and dis_dt? It would probably be better they were values in either dataset one or mbr__span.

renjithr
Quartz | Level 8

@ ballardw

     Right. I need those variables to do other calculation based on the age category.  SEX, Dob and Dis_dt are in the input datasets.

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

Register now!

What is Bayesian Analysis?

Learn the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.

Find more tutorials on the SAS Users YouTube channel.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 2 replies
  • 971 views
  • 0 likes
  • 2 in conversation