Simpler, but perhaps faster:
(defun GroupByNum_Mac2 (l n / a b)
(while l
(repeat n
(setq a (cons (car l) a) l (cdr l)))
(setq b (cons (reverse a) b) a nil))
(reverse b))
(defun GroupByNum_Mac3 (l n / a b i)
(while l (setq i n)
(while (< 0 i)
(setq a (cons (car l) a) l (cdr l) i (1- i)))
(setq b (cons (reverse a) b) a nil))
(reverse b))