The easiest way to do this is through the creation of arrays and the use of dynamic functions. This will help to reduce the amount of code you'll need to implement, as well as making it easier to add/remove classes or skills. I'm presuming some foreknowledge of arrays and functions on your part. If you don't know a lot about them, check out some of the tutorials or the manual, as they give fairly good overviews of the concepts.
First, you should establish the arrays that you want to use outside of C2. Editing them by hand this way does require a few more lines of code than normal, but it's far easier than trying to edit them via C2 directly. In this example, there will only be one array, though it's up to you how much you want to subdivide the arrays up.
The leftmost column is entirely for the benefit of the editor. In actual scripts, it won't be referenced at all. The rightmost one (and any columns after that) contain the data for each class. This involves any stats that you might want to have (such as BaseDefense, BaseAttack, etc.), as well as any skills that a particular class will have.
The arrays should be saved as .CSV files, which should then be added to your project as project files. I use rexrainbow's CSV2Array plugin (which you can find with a quick Google search) in order to "inject" the data from the .CSV files into an Array object. The method I use is mostly meant to make the injecting of multiple arrays easier, but it's not necessary if you only have a few of them. (It's a bit of a longer explanation, but I can show you an example, if you want.) The important thing is to get the data into an Array, which can be done by requesting the .CSV file using AJAX, checking for when that specific request has finished, and then injecting the data into an Array object using the CSV2Array plugin's features.
The second step I would do is to set up a separate Array object that will store all of the character's data after they select a class. Set it to the same height as the Array object that contains all of the class information (in the case of my example, to 11). When the player selects a class, you can then copy the basic class data from the class array to the character stat array, like so:
(Sorry that this got a bit cut off - just check the direct image link to see the full script.)
In this example script, "MonsterSheet" is the name of the array that contains my class data (ignore the name - just pulling it from a script I already had set up), while "CharacterSheet" is the Array object that I'm injecting the data from MonsterSheet into. The first parameter in this function (the Function.Param(0) call) contains the string reference from my MonsterSheet array. So, if the player selects the Fighter class in the menu screen, you would call the "SetClass" function, with Parameter 0 as "Fighter". The script will look up the x-index in the MonsterSheet array that has "Fighter," and all of the data from that column will be put into the CharacterSheet array.
You can then use basic scripts and functions to reference or change the data from the CharacterSheet array. If, for example, you have it so that the player character uses their first skill (Skill1 in the array) when they press "1" on the keyboard, you can simply have the script call up a function that references the CharacterSheet, like so:
This will then, in the case of our example, automatically run the function named Skill_PowerBlow. The main advantage of this array method is that you can very easily move skills around (such as making the player get them at a different level) without having to also move the code around much. Similarly, if you end up patching your game at all, it's much easier for games that are already in-progress to adjust, since they simply have to read from the new array and make adjustments accordingly. This method is also much easier to use when trying to apply things like status effects. When using variables, I had to create individual functions for every status effect that I wanted to apply, whereas, when using an array, it only requires a small handful of functions for applying/stripping status effects.