Here is what i tried. Is that right? data have;
input city2000 $ city2001 $ city2002 $ city2003 $;
datalines;
a a b c
a a a a
b a a a
c c c c
c a a a
;
data _null_;
if _n_=1 then do;
if 0 then set have;
length o d $50;
dcl hash H1 (multidata:'y',ordered:'y') ;
h1.definekey ('year','o','d') ;
h1.definedata ('year',"o","d") ;
h1.definedone () ;
call missing(o,d);
end;
set have end=last;
array t(*) pc:;
do _n_= 2 to dim(t);
year=vname(t(_n_));
o=t(_n_-1);
d=t(_n_);
rc=h1.add();
end;
if last then h1.output(dataset:'temp2');
run;
data want;
if _n_=1 then do;
if 0 then set temp3;
dcl hash H1 (dataset:'temp3',multidata:'y') ;
h1.definekey ('year','o','d') ;
h1.definedata ('flows') ;
h1.definedone () ;
end;
if 0 then set old_1;
array t(*) pc:;
set sort_2(rename=(region=o));
do _n_= 2 to dim(t);
year=vname(t(_n_));
do n=1 to nobs;
set sort_2(keep=region rename=(region=d)) nobs=nobs point=n;
flows=0;
rc= h1.find();
output;
end;
end;
keep year o d flows;
run;
... View more