It is not necessary to use loop. First sort your data using
PROC SORT data=yourdata out=newdata;
by ID KEY CYCLE;
run;
Second, in a DATA step,
DATA finaldata(drop=(CYCLEold));
set newdata(rename=(CYCLE=CYCLEold));
by ID KEY CYCLEold;
retain CYCLE;
if first.ID then CYCLE=0;
CYCLE + 1;
run;