我对SAS有些新意。我正在尝试更新文件名以通过循环编写excel文件,但是在分配文件名时遇到问题。这是我的代码:
%MACRO loop;
%DO year1 = 1995 %TO 2008;
DATA _NULL_;
dailyret = catx(STRIP(&year1),
'''/h1/usr11/angeli/finland/haz/phreg_dailyret_', '.csv''');
*to save output to excel;
ODS TAGSETS.EXCELXP
file= %QUOTE(dailyret)
STYLE=minimal
OPTIONS ( Orientation = 'landscape'
FitToPage = 'yes'
Pages_FitWidth = '1'
Pages_FitHeight = '100' );
*a block of code that runs the program, irrelevant to my question;
ods tagsets.excelxp close;
RUN;
%END;
%MEND loop;
%loop;
我已经尝试了很多这方面的变体,但每次,我总是得到一条错误信息:“ERROR:没有逻辑分配文件名DAILYRET”。
我有什么方法可以做到这一点,这样我就不必将物理引号放在“file =”的行中,并且能够更新年份吗?
非常感谢你!
-Angel
答案 0 :(得分:2)
引用宏变量前缀为&
。请确保使用双引号字符"
来引用文件名,因为宏引发符未在单引号内解析。
您还可以选择在宏名称后附加句点,以便解析器知道宏变量名称的结束位置以及常规文本的重新开始。这意味着当您想要附加一个以句点开头的扩展名时,您需要有两个句点,因为第一个句点将用于标记宏变量引用的结尾。
%MACRO loop;
%DO year1 = 1995 %TO 2008;
ODS TAGSETS.EXCELXP
file= "/h1/usr11/angeli/finland/haz/phreg_dailyret_&year1..xml"
STYLE=minimal
OPTIONS ( Orientation = 'landscape'
FitToPage = 'yes'
Pages_FitWidth = '1'
Pages_FitHeight = '100'
)
;
*-------------------;
*a block of code that runs the program, irrelevant to my question;
*-------------------;
ods tagsets.excelxp close;
%END;
%MEND loop;