it sounds like it would be possible to use a single subreport with a shared variable for each course that would then display in your main report, or may just be able to display the subreport values, depending on your situation.
If you need to use shared variables, they may look something like this in the subreport:
//{@sharedCourse1}
whileprintingrecords;
shared stringvar c1;
IF {table.course}="1" then c1 := {table.datedone}
else c1 := "";
And like this in the main report:
//{@sharedUpCourse1}
whileprintingrecords;
shared stringvar c1;
c1
If you can display all the items in the subreport and don't need to use shared variables, you would still use one formula for each course date, but it is very similar to using variable but a bit simpler in the end:
//{@sharedCourse1d}
whileprintingrecords;
IF {table.course}="1" then {table.datedone}
else "";