Character Demographics Randomizer
Play around using the following form, using the gender fields as an example. Categories might include things such as sexuality, nationality, ethnicity, temperament, age range, etc. The numbers after each option define the ratios of each individual option to the others in its category: if you want to use percents, just make sure they add up to 100.
Each of the options is randomized without taking into account the values of the others. That is, there will be a free association between options from each category. If you need to account for different variances in different populations – for example, the higher incidences of certain professions by gender – please run multiple generations.
Please note that this code has not been optimized yet, and may take a bit of time to run – a few seconds at 100 generations with four categories with 3-5 options each, and longer for more.