Yes, you right, but if you still want to keep the rand value to use it later in the query, try this:
MATCH (:Person)-[c:Meeting]->(q:Person)
WHERE q.att1 = 0
WITH q, c.distance AS dist, rand() AS r
WHERE (r < MIN( 0.25, MAX( 0.01, 1 / MAX( 1, dist/1000.0))))
SET q.att2 = 1