我突然想到一种很另类的方法:
proc trance data=origin out=mid:
by AEBODSYS AEDECOD;
var value;
id kind;
run;
data need;
set mid(drop=_4 rename=(_1=vall));
kind=1;
set mid(drop=_1 rename=(_4=val));
kind=4;
run;
是不是很巧妙?
proc transpose data=origin out=mid(drop=_name_);
by AEBODSYS AEDECOD notsorted;
var value;
id kind;
run;
data need;
set mid(in=a drop=_4 rename=(_1=value))
mid(in=b drop=_1 rename=(_4=value));
if a then kind=1;
else if b then kind=4;
if value =. then value=0;
run;
proc sort data=need;
by aebodsys aedecod kind;
run;