I made a system where I did the following:
For each enemy I would assign a number for each drop item (I stored in XML, but you could do instance variables or straight in the events if you don't have different enemy types). So for example it would look like:
Then I would use a local variable to store a random number between zero and total of those numbers -> random(0, 12) in this case. Then cycle through the drop items:
If random <= nothing amount( 6) then drop is nothing
elseIf random <= nothing amount plus coin amount (10) then drop is coin
Else drop is heart
I'm sure there is a way to do this with less events but it works. Was my first time creating this. Can see it in action in Ninja game linked in my signature. I like it because you can change one number and not have to change the rest so it will equal 100% each time; I feel like that could get really annoying.