Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/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
如何使用宏将名称中包含日期的多个文件读入SAS_Sas - Fatal编程技术网

如何使用宏将名称中包含日期的多个文件读入SAS

如何使用宏将名称中包含日期的多个文件读入SAS,sas,Sas,我试图创建一个宏来读取属于不同会计年度的多个文件,例如f2002-03、f2003-04。我尝试了以下代码,但没有成功。我真的很感谢你的帮助 % macro test (start,end); % do i=&start %to &end ; Filename fromzip ZIP “path\f200&i-0&i+1..dat.gz” gzip; Filename temp “path\file&i..txt”; ..... %Me

我试图创建一个宏来读取属于不同会计年度的多个文件,例如f2002-03、f2003-04。我尝试了以下代码,但没有成功。我真的很感谢你的帮助

% macro test (start,end); 
% do i=&start %to &end ;  
Filename fromzip ZIP “path\f200&i-0&i+1..dat.gz” gzip;  
Filename temp “path\file&i..txt”;   
.....  
%Mend;
%test (2,18); 

从2002年到2003年,从2003年到2004年,从2007年到2018年,“

听起来你想要这样的东西:

%macro test (start,end); 
%local year fname ;
%let start=%sysfunc(putn(&start,z2.));
%let end=%sysfunc(putn(&end,z2.));
%do year=20&start %to %eval(20&end -1);
  %let fname=&year-%substr(%eval(&year+1),3);
  %put &=year &=fname ;
%end;
%mend;
结果:

738   %test (2,18);
YEAR=2002 FNAME=2002-03
YEAR=2003 FNAME=2003-04
YEAR=2004 FNAME=2004-05
YEAR=2005 FNAME=2005-06
YEAR=2006 FNAME=2006-07
YEAR=2007 FNAME=2007-08
YEAR=2008 FNAME=2008-09
YEAR=2009 FNAME=2009-10
YEAR=2010 FNAME=2010-11
YEAR=2011 FNAME=2011-12
YEAR=2012 FNAME=2012-13
YEAR=2013 FNAME=2013-14
YEAR=2014 FNAME=2014-15
YEAR=2015 FNAME=2015-16
YEAR=2016 FNAME=2016-17
YEAR=2017 FNAME=2017-18
您可以通过让用户传递全年值来简化

%macro test (start,end); 
%local year fname ;
%do year=&start %to %eval(&end -1);
  %let fname=&year-%substr(%eval(&year+1),3);
  %put &=year &=fname ;
%end;
%mend;
%test (2002,2018); 

文件名的
xxxx-xx
部分是否表示年份和月份编号(
yyyy-mm
)?或者第二个数字应该是年末(“
CCyy-yy
)?嗨,蒂姆,非常感谢你的回复,很抱歉我延迟回复你。你的建议很有效,我需要你的建议。现在,当我尝试将fname放入文件名时,我没有得到任何响应。我在这里遗漏了什么?%宏测试(开始,结束);%本地年份fname;%执行年份=&开始%到%eval(&结束-1);%设fname=&year-%substr(%eval(&year+1),3);文件名fromzip“path\f&fname..dat.gz”gzip;%结束;%修补;%测试(20022018);你期望得到什么样的回应?您所做的只是定义一个指向zip文件的fileref。您没有生成任何代码来处理该fileref(从中读取或写入)。请注意,您正在反复使用相同的fileref、FROMZIP。因此,只有最后一个文件将指向宏的末尾。您可以打开MPRINT选项在日志中查看生成的文件名语句。感谢您的澄清!