Use this:
within(y[order(y$sales), ], p <- with(rle(sales), rep(c(0, head(cumsum(lengths), -1)), lengths))/(length(ID)-1))
Example output:
   ID sales         p
4   4     3 0.0000000
6   6     3 0.0000000
11 11     3 0.0000000
19 19     3 0.0000000
20 20     3 0.0000000
3   3     4 0.2631579
13 13     4 0.2631579
17 17     4 0.2631579
18 18     4 0.2631579
2   2     5 0.4736842
8   8     5 0.4736842
10 10     5 0.4736842
12 12     5 0.4736842
16 16     5 0.4736842
9   9     6 0.7368421
5   5     7 0.7894737
7   7     7 0.7894737
15 15     7 0.7894737
1   1     8 0.9473684
14 14     8 0.9473684
Data used:
   ID sales
1   1     8
2   2     5
3   3     4
4   4     3
5   5     7
6   6     3
7   7     7
8   8     5
9   9     6
10 10     5
11 11     3
12 12     5
13 13     4
14 14     8
15 15     7
16 16     5
17 17     4
18 18     4
19 19     3
20 20     3