写在前面。
先摆上宏代码。
%macro rdfile1(phy_path=);
/*****************************************************
Purpose: 获取一个目录下的所有文件名称,并返回一个table,各个文件名宏赋值为filename1,filename2...
Output: 返回一个table,各个文件名宏赋值为filename1,filename2...
Parameters: phy_path: 文件物理存储路径
******************************************************/
data fileinfo;
rc = filename('myfile', "&phy_path.");
did = dopen('myfile');
filen = dnum(did);
call symput( "filen", filen);
if filen > 0 then
do;
do ii = 1 to filen;
filename = dread(did, ii);
call symput( "filename"||strip(put(ii, best.)), filename);
put filename;
output;
end;
end;
rc = dclose(did);
run;
%if %eval(&filen.) =0 %then %do;
%put WARNING: ********************* 给定目录&phy_path.下没有文件 *********************;
proc datasets lib=work noprint;
delete fileinfo;
quit;
%end;
%if %eval(&filen.) >0 %then %do;
proc sql;
create table macros as
select *
from dictionary.macros
;
quit;
%end;
%mend rdfile1;
%rdfile1(phy_path=D:\project\OMN-SF-301\Statistical\Data\ADaM);
这个宏在大佬眼里可能会觉得幼稚小儿科,也确实没什么好讲的。
宏需要哪些参数
,输入什么
,输出的什
么,在代码框里已经说清楚了。不再赘述。
想借这个宏说的是dopen
函数。要使用它,其实通常会和它的3个好兄弟
一起使用,dnum
、dread
和dclose
函数。
它们的作用可以根据它们的名字知道。
dopen函数的参数
dopen(fileref)
fileref是一个字符常量、变量或表达式,用于指定分配给目录的文件。
- 打开成功,返回一个大于0的数值;
- 打开失败,返回0;
dopen
这里需要注意一下,Opens a directory, and returns a directory identifier value.
。
传递给给dopen
的是一个目录的引用
,它返回一个目录的标识符
,传递给dnum
、dread
和dclose
函数使用。例如:
did = dopen('myfile');
filen = dnum(did);
filename = dread(did, 1);
直接传递给dopen
函数一个目录字符串
是不行的,而应该使用filename
函数来把目录路径引用给一个字符
。
data test;
id = dopen("E:\test");
run;
data test1;
fileref= "E:\test";
id = dopen(fileref);
run;
data test2;
rc =filename( 'fileref', "E:\test");
id = dopen('fileref');
run;
以上。