I'm not sure how exactly you want your program to work, but I'll give you a few basic details that should provide most of what you need.
To get a pointer to an OS variable in RAM:
GetCalc("var_name")
To find the size of an OS equation, program, appvar, or string:
{pointer_to_var-2}?
To create an OS variable and get a pointer to it:
GetCalc("var_name",size)
To copy data from one memory location to another:
Copy(copy_from,copy_to,size)
Using these pieces of information, you should be able to create a simple Axe program that creates a program and copies the contents of Str9 into it. :)
If you'd like to see a simple Axe program to do this, I'll put two such Axe programs in spoilers. The first will be the normal version, which should be a bit simpler to understand, and the second will be the optimized version. But I feel confident that you won't need to peek to figure it out. :)
EDIT
So apparently I completely misunderstood the request. It was how to create a program whose name is in Str9, which makes a lot more sense. As an added detail, TiAddict added in IRC that he wanted the program to be created with a size specified by the OS variable L. Here's how I would do it. And don't worry about that hexadecimal number, that's just a free memory location that's well-sized for what we need and shouldn't be used by anything else, which I got from thepenguin77's excellent list (http://ourl.ca/16406/306283).
.STR9PROG
?9D8A?°Name
'prgm'?Name
GetCalc("Str9")?S
Copy(S,°Name+1,{S+2}??Z)
and 0?{Z+°Name+1}
GetCalc(°Name,float{GetCalc("varL")})