|
跟crackman读SAS程序(43)-打印某个文件目录下的所有指定格式的SAS数据集
options mprint;
%macro drive(dir);
%let filrf=mydir; /*创建一个宏变量*/
%let librf=temp;
%let lib=%sysfunc(libname(&librf,&dir)); /*通过函数LIBNAME建立数据集*/
%let rc=%sysfunc(filename(&filrf,&dir)); /*建立FILENAME文件名*/
%let did=%sysfunc(dopen(&filrf)); /*打开要读取的文件目录*/
/* 返回该文件目录下的文件的个数 */
%let memcnt=%sysfunc(dnum(&did));
%let cnt=0;
%do i = 1 %to &memcnt;
/*获得文件的扩展名 */
%let lname=%qupcase(%qscan(%sysfunc(dread(&did,&i)),2,.));
/* 获得文件的名字(除去扩展名) */
%let fname=%qscan(%qsysfunc(dread(&did,&i)),1,.);
/*确定是不是扩展名为SAS7BDAT格式*/
%if %upcase(&lname) = SAS7BDAT %then %do;
proc print data=&librf..&fname;
run;
%end;
%end;
/*关于该文件目录*/
%let rc=%sysfunc(dclose(&did));
%mend drive;
%drive(C:\Documents and Settings\Administrator\My Documents\My SAS Files)
下面是转载的一篇日志:
%MACRO importFile(dirName=c:\abc\, dsout=DSOUT);
%PUT %STR(----------->dirName=&dirName) ;
data fileList ;
rc=filename("DIR","&dirName") ;/*把&DIRNAME值传给文件引用符“DIR"*/
openFile=dOpen("DIR") ;/*得到路径标示符OPENFILE,DOPEN是打开directory的sas函数*/
if openFile>0 then do ;/*如果OPENFILE>0表示正确打开路径*/
num=dNum(OPENFILE) ;/*得到路径标示符OPENFILE中member的个数num*/
do i=1 to num ;
name=dRead(openFile,i) ;/*用DREAD依次读取每个文件的名字到NAME*/
if index(upcase(name),"MTH")^=0 then output;
end ;
end ;
keep name ;/*只保留NAME列*/
run;
/*把文件名存为依次编号的宏变量*/
data _NULL_;set fileList end=L;
call symput( cat("file",_N_),name);
if L then call symput("nobs",_N_);
run;
/*准备一个空的数据文件*/
data &dsout;run;
/*依次读入数据文件---> tmp*/
%do _i=1 %to &nobs;
%let tmpFile=&&file&_i;
data tmp;
%let _EFIERR_ = 0; /* set the ERROR detection macro variable */
infile "&dirName.&tmpFile" TRUNCOVER lrecl=63 ;
format mthdate yymmdd8. ;
format stkno $6. ;
format buysell $1. ;
format excd $1. ;
format mthtimee $8.;
format recno $8. ;
format odrno $5. ;
format mthpr 7.2 ;
format mthshr best9. ;
format mthprt $4. ;
format odrtpe $1. ;
format mark $1. ;
format brkid $4. ;
format mthtime time11.2;
format mthdatetime datetime20.2;
label mthdate="成交日期";
label stkno="股票代码";
label buysell="买卖别";
label excd="交易会种类代码";
label mthtimee="成交时间";
label recno="成交序号";
label odrno="成交及委托连结代码一";
label mthpr="成交价格";
label mthshr="成交股数";
label mthprt="成交回报印表机";
label odrtpe="委托种类代号";
label mark="投资人类别";
label brkid="成交及委托连结代码二";
label mthtime="成交时间";
label mthdatetime="成交的日期时间";
input
@1 mthdate yymmdd8.
@9 stkno $6.
@15 buysell $1.
@16 excd $1.
@17 mthtimee $8.
@25 recno $8.
@33 odrno $5.
@38 mthpr 7.2
@45 mthshr 9.
@54 mthprt $4.
@58 odrtpe $1.
@59 mark $1.
@60 brkid $4.
;
hh1=substr(mthtimee,1,2);
mm1=substr(mthtimee,3,2);
ss11=substr(mthtimee,5,2);
ss12=substr(mthtimee,7,2);
ss1=ss11!!"."!!ss12;
hh=input(hh1,2.);
mm=input(mm1,2.);
ss=input(ss1,4.2);
mthtime=hms(hh,mm,ss);
mthdatetime=dhms(mthdate,hh,mm,ss);
drop mthtimee hh1 mm1 ss11 ss12 ss1 hh mm ss;
if _ERROR_ then call symputx('_EFIERR_',1); /* set ERROR detection macro variable */
run;
/*每个数据文件 ---> &dsout*/
data &dsout;set &dsout tmp;
run;
%end;
%mend importFile;
%importFile(dirName=c:\, dsout=ccc)
|