but this will replace all SI2 with SI1 which I dont want
No, it doesn't.
When I run my job with your input, I get the output you say you want. I don't understand how you would get the output you say you got if you used my job as shown and your input records are as shown. WITH(1,10) takes the first 10 bytes from the overlay record (e.g. first record) and the remaining bytes from the base record (e.g. second record). So the second record would have '12345 SI2' and not '12345 SI1'.
Is 'SI2' in positions 7-9 as shown in your example? If not, where is 'SI2'?
Please check that your job matches mine exactly and that the data is in the positions you indicated. If you think that's true and you are still getting the "wrong" output, then post the TOOLMSG and DFSMSG messages you receive for the job.