proc sort data=raw out=raw1;by city1 city2 yrear;run;
proc sort data=raw nodupkey out=a;by city1 city2;run;
data b;
set a;
by city1 city2;
retain code;
if first.city2 then code=1;
else code+1;
keep city1 city2 code;
run;
data need;
merge raw1 b;
by city1 city2;
run;