I tired to build your schema into a sample DB but what you've got just doesn't make sense for me so i did my best.
By doing calculations off your result set, you are getting into more complex queries so you've got a few options. You could dump your data into a temp table (#tablename), table variable (@tablename), or use your select query as a table itself (WITH TableName AS (SELECT * FROM TableName). I chose to do it using the with clause.
WITH ResultSet AS (
SELECT DISTINCT
r.rate As Rate,
f.bfid as BFid,
CASE
WHEN r.rate = '1' THEN '100'
WHEN r.rate = '2' THEN '75'
WHEN r.rate = '3' THEN '50'
WHEN r.rate = '4' THEN '25' END AS Translated_Rate
FROM bthfac AS f,batch b,facfeedback r
WHERE f.facid= '60,75,6'
and f.Bthid=b.Bthid
and r.bfid = f.bfid
and b.class= 'PST'
and year(b.examdate)= '2011'
and month(b.examdate)= '10'
)
SELECT
*,
(SELECT SUM(CAST(Rate as float)) / COUNT(*) FROM ResultSet WHERE BFid = '72')
FROM ResultSet
This "should" work. With what i was able to manage with your schema in replicating it...i swapped out table names/and i dont know data types so thats why i say "should". The CAST Rate as Float is there since i dont know if you have rate as an integer/float/or a varchar in your db.