Simplest way is block 3 and if you want erase block1 and 2.
Have a look at this uses same block can add erase etc, note I used bedit and moved the attribute to left text alignment left also. Do before running.
I pick the two blocks just in case layers are different, you do need to pick the ssget twice will fix say ver 2 this is just a yes it works test.
; convert two blocks to one
; by alanh Nov 2019
(defun c:test ( / obj ss ss2 t1 t2 b1 b2 lay ins att )
(setvar 'cmdecho 0)
(setq obj (vlax-ename->vla-object (car (entsel "pick block 1"))))
(setq obj2 (vlax-ename->vla-object (car (entsel "pick block 2"))))
(setq name (vla-get-effectivename obj))
(setq scalex (abs (vla-get-xscalefactor obj)))
(setq scaley (abs (vla-get-yscalefactor obj)))
(setq scalef (* scalex 9.5) )
(prompt "\nselect all blocks")
(setq ss (ssget (list (cons 0 "insert")(cons 8 (vla-get-layer obj)))))
(setq lst '())
(repeat (setq x (sslength ss))
(setq obj (vlax-ename->vla-object (ssname ss (setq x (- x 1)))))
(setq ins (vlax-get Obj 'insertionPoint))
(setq att (vla-get-textstring (nth 0 (vlax-invoke Obj 'getattributes))))
(setq lst (cons (list (car ins)(cadr ins) att) lst))
)
(setq lay (vla-get-layer obj2))
(repeat (setq x (length lst))
(setq plst (nth (setq x (- x 1)) lst))
(princ x)
(setq p1 (list (nth 0 plst)(nth 1 plst)))
(setq p2 (polar p1 (* pi 0.25) scalef))
(setq p3 (polar p1 (* pi 1.25) scalef))
(setq ss2 (ssget "f" (list p2 p3)(list (cons 0 "insert")(cons 8 lay)) ))
(if (= ss2 nil)
(princ "\nMiss\n")
(progn
(setq t1 (nth 2 plst))
(setq obj (vlax-ename->vla-object (ssname ss2 0 )))
(setq t2 (vla-get-textstring (nth 0 (vlax-invoke Obj 'getattributes))))
(command "-insert" name p1 scalex scaley 0 (strcat t1 " " t2))
)
)
)
;(command "erase" ss ss2 "")
)
(c:test)