I had the same idea using Sow & Reap, but used Table in place of Do:
First@Last@Reap[
Table[
If[ j*RandomReal[] > 1/2
, Null
, Sow[{i, i^2, i^3}]]
, {i, 3}, {j, 9}
]]
Each time it's executed, the length of output lists varied. For example:
{{1, 1, 1}, {1, 1, 1}, {3, 9, 27}, {3, 9, 27}}
{{1, 1, 1}, {2, 4, 8}, {3, 9, 27}}
{{1, 1, 1}, {1, 1, 1}, {2, 4, 8}, {2, 4, 8}, {2, 4, 8}, {2, 4, 8}}
The iterators i and j could be swapped for a different effect.