Really? That's interesting. I thought that your original example was three rows of record with each row being one Detail that was repeated. Now it appears that this whole example is on detail section with NINE fields in it. Actually, now that I read your post again I see that you mentioned that (I missed it).
Ok, I threw this formula together and it seems to work pretty well. It isn't very efficient (unless you make the AllAges variable Global so it doesn't have to be recalculated each time), but it's not a big deal.
Create this formula for each time you want to display the age and change the final array subscript for each formula from 1 to 2 to 3 so that it displays each index once. Also, put the full age field name in the formula.
StringVar AllAges;
AllAges := IIF({Age1}<>"", {Age1}+",","") & IIF({Age2}<>"", {Age2}+",","") & IIF({Age3}<>"", {Age3}+",","") & ",,,";
Split(AllAges,",")[1];
Real quick, this formula builds a comma separated string of all the non-blank age fields. If a field is blank then it doesn't get added. AFterwards, the string is split into an array and you just display one element of the array.
This should work for you!