美文网首页SAS学习笔记
SAS编程实践---宏:获取某目录下的所有文件名称,其实想说的是

SAS编程实践---宏:获取某目录下的所有文件名称,其实想说的是

作者: RSP小白之路 | 来源:发表于2023-11-02 08:44 被阅读0次

写在前面。

先摆上宏代码。

%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个好兄弟一起使用,dnumdreaddclose函数。

它们的作用可以根据它们的名字知道。


dopen函数的参数

dopen(fileref)
fileref是一个字符常量、变量或表达式,用于指定分配给目录的文件。
- 打开成功,返回一个大于0的数值;
- 打开失败,返回0;

dopen这里需要注意一下,Opens a directory, and returns a directory identifier value.

传递给给dopen的是一个目录的引用,它返回一个目录的标识符,传递给dnumdreaddclose函数使用。例如:

did = dopen('myfile');
  filen = dnum(did);
   filename = dread(did, 1);

直接传递给dopen函数一个目录字符串是不行的,而应该使用filename函数来把目录路径引用给一个字符

data test;
   id = dopen("E:\test");
run;
返回值为0,打开目录失败
data test1;
   fileref= "E:\test";
   id = dopen(fileref);
run;
返回值为0,打开目录失败
data test2;
   rc =filename( 'fileref', "E:\test");
   id = dopen('fileref');
run;
返回值大于0,打开目录成功

以上。

相关文章

网友评论

    本文标题:SAS编程实践---宏:获取某目录下的所有文件名称,其实想说的是

    本文链接:https://www.haomeiwen.com/subject/mtjgidtx.html