I do not have crystal in front of me, so apologize in advance for any errors.
group by doner ID.
sort within group by date.
use a formula to decide if the current record's date is 1 year more than the previous record's date and act accordingly.
//{@datecheck}
numbervar dc;
IF onfirstrecord=true then dc := 1 else
IF Previous ({table.DonerID}) <> ({table.DonerID}) THEN dc := 1 ELSE
IF Year({table.data}) = year(previous({table.date}))+1 then dc := dc+1 else dc := dc;
If it is possible that a doner may give more than once a year, the formula would need a little modification.