Use hold keyframes. Also, you can use a loopOut expression to make them do that movement constantly.
you can do this with expressions. For fun I played around with a test animation
to do this you would have 2 precomps for each row of aliens depicting the two (one comp has the first alien look, the second comp has the second look all in the same position as the first)
the two comps are placed in a master comp, positioned vertically to where you want them.
this expresion would go in the position parameter of both comps. it starts horizontal positioning at 0 and increments 100 every 15 frames
var increment = 100;
var t = timeToFrames(t = time + thisComp.displayStartTime, fps = 1.0 / thisComp.frameDuration, isDuration = false);
var s = parseInt(t/15);
var pos = transform.position;
the next expression would go in the opacity parameter of both comps, it alternates giving 100% opacity between the two comps every 15 frames. The comps need to appear 1 after the other in the layer stack for it to work.
var t = timeToFrames(t = time + thisComp.displayStartTime, fps = 1.0 / thisComp.frameDuration, isDuration = false) % 30;
var s = (t%30);
var i = this.index %2;
var change = [0,100];
change = [100,0];
o = change;
o = change;
Like I said, I just threw it together to show how expresions could solve it. Ideally you would need some code in the posion to shift down and reset horizontal position to 0 every so often