|
也许还有另一种办法,这个办法将所有文件是按照年限,先读成几个文件,如果需要,再继续合并成一个大文件:
%let vars=id date;
data sf97 sf98 sf99 sf00 sf01;
id=.;
run;
%macro readsf(yr, infile);
%if &yr=97 %then
%do;
data a;
set fy97sf.&infile(keep=&vars);
proc sort; by id;
data sf97;
set sf97 a; by id;
if id=. then delete;
run;
%end;
%else %if &yr=98 %then
%do;
data a;
set fy98sf.&infile(keep=&vars);
proc sort; by id;
data sf98;
set sf98 a; by id;
if id=. then delete;
run;
%end;
%else %if &yr=99 %then
%do;
data a;
set fy99sf.&infile(keep=&vars);
proc sort; by id;
data sf99;
set sf99 a; by id;
if id=. then delete;
run;
%end;
%else %if &yr=00 %then
%do;
data a;
set fy00sf.&infile(keep=&vars);
proc sort; by id;
data sf00;
set sf00 a; by id;
if id=. then delete;
run;
%end;
%else %if &yr=01 %then
%do;
data a;
set fy01sf.&infile(keep=&vars);
proc sort; by id;
data sf01;
set sf01 a; by id;
if id=. then delete;
run;
%end;
%mend readsf;
%readsf(97, sf97v0102) %readsf(97, sf97v0304) %readsf(97, sf97v0506)
%readsf(97, sf97v0708) %readsf(97, sf97v0910) %readsf(97, sf97v1112)
%readsf(97, sf97v1314) %readsf(97, sf97v1516) %readsf(97, sf97v1718)
%readsf(97, sf97v1920) %readsf(97, sf97v2122)
%readsf(98, sf98_1) %readsf(98, sf98_2) %readsf(98, sf98_3)
%readsf(98, sf98_4) %readsf(98, sf98_5) %readsf(98, sf98_6)
%readsf(98, sf98_7) %readsf(98, sf98_8) %readsf(98, sf98_9)
%readsf(98, sf98_10) %readsf(98, sf98_11)
%readsf(99, sf990102) %readsf(99, sf990304) %readsf(99, sf990506)
%readsf(99, sf990708) %readsf(99, sf990910) %readsf(99, sf991112)
%readsf(99, sf991314) %readsf(99, sf991516) %readsf(99, sf991718)
%readsf(99, sf991920) %readsf(99, sf992122)
%readsf(00, sf00v0107) %readsf(99, sf00v0814)
%readsf(00, sf00v1518) %readsf(00, sf00v1922)
%readsf(01, sf010105) %readsf(01, sf010608) %readsf(01, sf010911)
%readsf(01, sf011214) %readsf(01, sf011517) %readsf(01, sf011820)
%readsf(01, sf012122)
|