Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File io 在SAS 9.4中使用宏变量读取文件夹内容_File Io_Sas_Pipe_Filenames_Sas Macro - Fatal编程技术网

File io 在SAS 9.4中使用宏变量读取文件夹内容

File io 在SAS 9.4中使用宏变量读取文件夹内容,file-io,sas,pipe,filenames,sas-macro,File Io,Sas,Pipe,Filenames,Sas Macro,我正在尝试使用SAS宏获取目录中的文件列表,SAS宏使用宏变量动态指定文件夹名称。我运行的代码如下所示: %macro veicolo(codice_veicolo); filename pipedir pipe ' dir "some_path\&codice_veicolo" /S' lrecl=5000; data &codice_veicolo; infile pipedir truncover; input line $char1000.; length d

我正在尝试使用SAS宏获取目录中的文件列表,SAS宏使用宏变量动态指定文件夹名称。我运行的代码如下所示:

%macro veicolo(codice_veicolo);

filename pipedir pipe ' dir "some_path\&codice_veicolo" /S' lrecl=5000; 

data &codice_veicolo;
 infile pipedir truncover;
 input line $char1000.;
 length directory $1000;
 retain directory;
 if line =' ' or
 index(upcase(line),'<DIR>') or
 left(upcase(line))=:'VOLUME' then
 delete;
 if left(upcase(line))=:'DIRECTORY OF' then
 directory=left(substr(line,index(upcase(line),'DIRECTORY OF')+12));
 if left(upcase(line))=:'DIRECTORY OF' then
 delete;
 if input(substr(line,1,10),?? mmddyy10.) = . then
 substr(line,1,10)='12/31/2999';
 date=input(substr(line,1,10),?? mmddyy10.);
 format date mmddyy10.;
run;

proc sort data=&codice_veicolo;
 by directory descending date;
run;

data folder_&codice_veicolo(drop=i line);
 set &codice_veicolo;
 by directory;
 length filename $75;
 retain number_of_files_in_directory directory_size;
 if first.directory then
 do;
 number_of_files_in_directory=input(scan(line,2,' '),32.);
 call symput(nfiles,number_of_files_in_directory);
 directory_size=input(scan(line,4,' '),comma32.);
 end;
 file_size=input(scan(line,3,' '),comma32.);
 filename=' ';
 do i=4 to 100;
 filename=trim(left(filename))||' '||scan(line,i,' ');
 if scan(line,i,' ')=' ' then
 leave;
 end;
 if index(upcase(line),'FILE(S)') then
 delete;
 if date ge '30DEC2999'd then
 delete;


run;  


%mend;
我认为出于某种原因,它无法解析宏变量,但如果我运行:

%let pgmpath = %sysfunc(pathname(pipedir));
%put &pgmpath;
我得到了正确的路径和目录,因此我假设问题出在infle语句中。代码在不使用宏变量的情况下运行良好

我正在Windows 8上使用SAS 9.4。有什么想法吗

提前感谢:)
Luca

宏变量引用不在单引号内展开。 试试这个

filename pipedir pipe %sysfunc(quote(dir /s "some_path\&codice_veicolo")) lrecl=5000; 

太棒了!很好用:D非常感谢!
filename pipedir pipe %sysfunc(quote(dir /s "some_path\&codice_veicolo")) lrecl=5000;