Quick testing, join wants individual entities and not a selection set: use (ssname sset1 0) (ssname sset1 1)... instead of sset1
Alternative would be record all the points in a list and entmake the polyline using these points or (command pline.... ) with all the points for all the stair
EDIT:
Following your code, this uses the entmake method:
(defun c:test ( / s1 points r1 t1 newpoly)
(setq t1 (getpoint "\nEnter first insertion point: ")) ; Get insertion point
(setq points (list t1)) ; Create a list of points
(repeat 6 ; repeat n times (6)
(setq r1 (polar t1 (* pi 0.5) 0.15)) ; riser calculation
(setq t1 (polar r1 0 0.3)) ; tread calculation
(setq points (append points (list r1))) ; add riser point to list of points
(setq points (append points (list t1))) ; add tread point to list of points
)
(setq newpoly (entmakex (append (list ; create a polyline from list of points
(cons 0 "LWPOLYLINE")
(cons 100 "AcDbEntity")
(cons 100 "AcDbPolyline")
(cons 90 (length points))
(cons 70 0))
(mapcar (function (lambda (p) (cons 10 p))) points))
)) ; end setq, end entmakex
(princ) ; exit quietly
)