As noted, you could do the printing all with one line of code, but it becomes very unclear
what the line is doing versus a simple DO loop as per above.
program testit
implicit none
integer,parameter :: i=100
integer :: x(i),y(i),z(i), j
real :: r(i)
character(len=1) :: nl=new_line('a')
call random_number(r)
x=r*10
call random_number(r)
y=r*10
call random_number(r)
z=r*10
write(*,'(4(g0,1x))') ' X','Y','Z','',(nl(:merge(1,0,x(j).ne.x(max(1,j-1)))), x(j),y(j),z(j),j=1,i)
end program testit