BlueMeteor's suggestion is close to how I'd do it, but watch out for NULL values. I'd use 0 instead of null:
select
count(case s1q1 when 4 then 1 else 0 end) as s1q1_Count,
count(case s1q2 when 4 then 1 else 0 end) as s1q2_Count,
count(case s1q3 when 4 then 1 else 0 end) as s1q3_Count,
count(case s1q4 when 4 then 1 else 0 end) as s1q4_Count,
.....
FROM database
where 4 in (s1q1 , s1q2 , s1q3 , s1q4)
Along the lines of constructive criticism, this is way too complicated because your table has an array inside each row (all those s1qx fields are really an array). It would be much better to have each value in a separate row. Then your query would be very simple:
myTable
qtype qvalue
s1q1 4
s1q2 2
s1q3 6
s1q3 4
s1q4 4
...
select qtype, count(*)
from myTable
where qvalue = 4
group by qtype