Right out of my head:
I'd replace
_sold = random 3
tr0 = "Ins_Soldier_Medic"
tr1 = "Ins_Soldier_1"
tr2 = "Ins_Soldier_2"
tr3 = "Ins_Soldier_AT"
_unit = _nearestgrp createUnit ["tr_sold", getPos spawntent, [], 0, "none"];
with:
all_tr = ["Ins_Soldier_Medic","Ins_Soldier_1","Ins_Soldier_2","Ins_Soldier_AT"];
_sold = all_tr select (random floor (count all_tr));
_unit = _nearestgrp createUnit [_sold, getPos spawntent, [], 0, "none"];
(not sure about random floor <number>, i think it worked that way if i remember correctly)