The syntax you posted is invalid and hard to read, also it seems your logic is wrong.
Try this instead:
declare @stuyear int = 11
select
cast(
sum(
case when @StuYear=11 and [Levels of Progress] < 3 or
@StuYear=10 and [Levels of Progress] < 2 or
@StuYear=9 and [Levels of Progress] < 1 then 1
else 0 end
)*100.0 /
NULLIF(count([Levels of Progress]),0)
as Numeric(5,2))
from (values (cast(null as int))) x([Levels of Progress])
Replace the from part with your own table. This is a valid syntax returns null when the count is null.