At the top of your script it tells you how to do it. The minimum required things are position, and groupname. You gave them all names but didn't create them for a pre-existing group. They have to be part of a group that already exists on the map. If you don't want them assigned to groups that are already on the map, then create dummy groups. Place a soldier on the map and give it a groupname and delete it. alpha = group this; deletevehicle this. Now you have a groupname to work with and the soldier is deleted at mission start and won't be on the map. You can even give it waypoints and the created units will follow them.
Now to create soldiers you'd use this syntax.
"SoldierEMG" createunit [getmarkerpos "blahblah", alpha, "soldier1 = this", 0.7, "CORPORAL"]
Now you have the position, groupname, init which gives the units name, his skill, and rank. All your created units need that. You need to use the quotation marks also. If you only use position and groupname it will work, but then you can't move them into vehicles since you don't have a soldier name to work with, so you want to use the init part. Also the default skill is 0.1 (total idiot) so using 0.7 gives him a little brains. You can use any groupname you dream up, it doesn't have to be alpha or bravo etc...Remember that you can only create 12 soldiers for a group, so if you're making a bunch, then make several dummy soldiers with different groupnames to work with. Obviously, you want different groupnames to make units for tanks and other vehicles.
I noticed you're creating units to put in a Mi24, but the Mi24 won't hold that many in its cargo as you're creating. You need to check the editing depot for vehicle capacity values.