Thank you @FreelanceReinh for your response and the code gave the expected result.
I agree with you to have a numeric variable for sorting purpose.
data have;
infile cards dlm='09'x;
input Subjid : Visit$ Value;
visitnum=input(compress(visit,,'kd'),best.);
cards;
6 Visit1 75
6 Visit2 82
6 Visit3 14
6 Visit4 73
6 Visit5 67
6 Visit6 61
6 Visit7 38
;
proc sort data=have out=have2(keep=subjid visit visitnum value);
by subjid visitnum ;
run;
data want;
do until(last.subjid);
set have2;
by subjid visitnum;
if nmiss(value,base)=0 then pchg=((value-base)/base)*100;
else pchg=.;
output;
if value>.z then base=min(base, value);
end;
run;
... View more