Help using Base SAS procedures

DO statement not working

Reply
Contributor spg
Contributor
Posts: 61

DO statement not working

Hi,

I'm trying to write a code that will calculate ages of all members of a family (MEM1 to MEM7) from their dob. My data looks like this

FAMILYMEM1MEM2MEM3MEM4MEM5MEM6MEM7
0012/1/19419/1/20002/1/2004....
0026/1/1989......
0038/1/19638/1/1963.....
0049/1/19946/1/2000.....

When I run the following code, it says MEMi variable is uninitialized. Please help.

data a;

set b ;

array age {7} age1-age7;

array age_mem {7} age_mem1-age_mem7;

do i=1 to 7;

age(i)=floor( (intck('month', MEM(i), '01jan2013'd) -(day('01jan2013'd) < day(MEM(i))))/12);

age_mem(i)= age(i)-(floor( (intck('month', MEM(i), '01jan2013'd) -(day('01jan2013'd) < min(day(MEM(i)), day(intnx('month','01jan2013'd,1) -1)))/12)));

output;

end;

run;

Thanks!

Super User
Posts: 11,343

Re: DO statement not working

Looks like you need an additional array:

array mem mem1-mem7;

and [] instead of () usually

so

age(i)=floor( (intck('month', MEM, '01jan2013'd) -(day('01jan2013'd) < day(MEM(i))))/12);

should be

age=floor( (intck('month', MEM, '01jan2013'd) -(day('01jan2013'd) < day(MEM)))/12);

Regular Contributor
Posts: 227

Re: DO statement not working

Super User
Super User
Posts: 7,074

Re: DO statement not working

The error message is because the name of the array was AGE_MEM and not MEM.

Look at this thread for how to calculate age. 

Also you probably do not want the OUTPUT statement.  Unless you also want to rotate the data into a vertical format.

Contributor spg
Contributor
Posts: 61

Re: DO statement not working

Hey! Thanks for the tips on the age calculation facility in SAS 9.3. I do have that version and will make use of it towards this end.

Thanks again, all. I alsofixed the code to make it run now.

Ask a Question
Discussion stats
  • 4 replies
  • 236 views
  • 0 likes
  • 4 in conversation