SAS批量导入,数据的批量合并与拆分
(2014-01-08 17:19:37)
标签:
教育 |
分类: 03SAS数据处理 |
教你个简单的方法,在文件夹里新放一个空的excel,然后全选所有的文件,在你新建的excel上鼠标右键,重命名,随便起个名字,然后所有的文件就有规律了,有规律后使用下面的宏。
TXT:
%macro
excel(datapath=,dataname=,datanum=);
%do i=1 %to
&datanum;
proc import
datafile="&datapath&dataname (&i).txt"
out=&dataname&i
DBMS=tab REPLACE;
GETNAMES=YES;
DATAROW=2;
%end;
%mend;
%excel(datapath=d:\car\,dataname=a,datanum=3);
quit;
EXCEL:
%macro
excel(datapath=,dataname=,datanum=);
%do i=1 %to &datanum;
proc import datafile="&datapath&dataname
(&i).xls"
out=&dataname&i replace;
%end;
%mend;
%excel(datapath=C:\Documents and
Settings\chao\桌面\上海宝山\生化结果\,dataname=bs_sh,datanum=8);
现有近100个excel文件,目前一个宏已经将excel文件名读取,现在我要将所有的excel的数据读入到一个sas数据集中,excel的数据格式都是一样的.
假设你存放excel文件名的数据集在work下面,并且名字是test:
proc sql noprint;
select distinct scan(name,1,'.') into: ds separated by ' '
from test;
quit;
data _null_;
set test;
code="proc import datafile='D:/"||strip(name)||"' out="||scan(strip(name),1,'.')||" replace;run;";
call execute(code);
run;
data wanted;
set &ds;
run;
proc sql noprint;
select distinct scan(name,1,'.') into: ds separated by ' '
from test;
quit;
data _null_;
set test;
code="proc import datafile='D:/"||strip(name)||"' out="||scan(strip(name),1,'.')||" replace;run;";
call execute(code);
run;
data wanted;
set &ds;
run;
我现在有一个数据文件,总共4亿3千多万行,我想拆成每个有一千万行的数据文件,这样方便我导出txt文件打开。
%macro splitdata(n = , step =
);
data %do i = 1 %to &n;
test&i %end;;
run;
%mend;
%splitdata(n = 44, step =
10000000);
或者
%macro splitdata(n = , step =
);
data %do i = 1 %to &n;
test&i %end;;
run;
%mend;
%splitdata(n = 44, step =
10000000);
或者:
%macro smallfiles(n=,
step=);
%mend smallfiles;
%smallfiles(n=44,
step=10000000);
把一个数据拆分为多个数据,按照一定的编码:
%macro arr(r);
%do i=1 %to
&r;
data out&i.;
set match01;
if num=&i.;
run;
data kk&i.;
merge
out&i.(in=a) samplexiao(in=b);
by date nnindcd;
if a=1 and b=1;
run;
data ff&i.;
set kk&i.;
chaju=ABS(B001100000-B001100000_sm);
run;
proc sort
data=ff&i.;
by chaju;
run;
%end;
%mend arr;
%arr(67);
data dd.final;
set ff1-ff67;
run;