You seem to have a bunch of visible attributes which themselves don't actually have a gameplay effect (age, location...) but offer a hint for the invisible, gameplay-related attributes (their preferences).
What you can do is randomly generate the visible attributes first and then when generate the gameplay-related attributes, bias them depending on the visible attributes.
For example, the formula for sweetness-preference could be random(0, 100) - random(0, age)
. This makes a senior who likes sweets less likely than a child who likes sweets.
Another option would be to define a couple of character stereotypes (child, elderly man, businesswoman, hipster, punk...) and assign default values for them.
When you create a new character, pick a stereotype. Then, when you roll for the character attributes, roll multiple random numbers and pick the value which is closest to the default value of the stereotype for that attribute. That way the majority of your characters will tend to conform to their stereotype, but there can and will be outliers. The more rolls you make, the less outliers you will have.
When having a set of predetermined stereotypes is not procedural enough for you, you could even randomly-generate the set of stereotypes and their default attributes. Your players will then still be able to spot correlations between characters based on the same randomized stereotype. For example, people who like soda also like red packing, because (unknown to the player) there is a stereotype which happens to have both a high default soda preference and a high default red preference and they all originate from it.