How to create waves with sequential name in a loop and use them as a variable in another loop?

problem1.
I want to make waves with names like wave1,wave2...........wave50 in a loop.
For this I wrote
Function data()
string name ="wave"
string U
variable i
for(i=1;i<30;i+=1)
sprintf U, "%s%d", name, i //Here It makes wave 1 wave2..etc
//print U //upto this it is working fine and printing wave 1 wave2.............wave30
make/N= (100) U //this i wrote to make waves with the names stored in U, but its showing error
endfor
end

Can you please suggest me How to write this properly and then further use them in a loop as a variable.

Problem2.
suppose after making this (size=100*1) N no of waves I want to concatenate each of them with my y and z waves to make a triple wave in a loop.Is there any way to do it in a loop or I have to write N separate concatenate command?
I'm not sure exactly what you want to do but here is an example that might give you some ideas:

Function/WAVE MakeXYZWave(xWave, yWave, zWave, xyzWaveName)
	Wave xWave, yWave, zWave
	String xyzWaveName
	
	Concatenate/O {xWave, yWave, zWave}, $xyzWaveName
	Wave xyzWave = $xyzWaveName
	return xyzWave
End

Function Demo()
	String baseName ="wave"
	Variable i
	for(i=0; i<3; i+=1)
		String xName
		sprintf xName, "%sX%d", baseName, i
		Make/N= (100) $xName
		Wave xWave = $xName

		String yName
		sprintf yName, "%sY%d", baseName, i
		Make/N= (100) $yName
		Wave yWave = $yName

		String zName
		sprintf zName, "%sZ%d", baseName, i
		Make/N= (100) $zName
		Wave zWave = $zName
		
		String xyzWaveName
		sprintf xyzWaveName, "xyzWave%d", i
		Wave xyzWave = MakeXYZWave(xWave, yWave, zWave, xyzWaveName)
		Printf "Created %s\r", NameOfWave(xyzWave)		// Will be same as xyzWaveName
		
		KillWaves xWave, yWave, zWave
	endfor
End


Execute these commands to read about the underlying concepts:

DisplayHelpTopic "Converting a String into a Reference Using $"
DisplayHelpTopic "Wave References"