我尝试在SAS中导出文件但我得到了#34;检测到开放代码语句递归。"错误。由于我根据日期导出多个文件,我根据提示日期定义为宏变量,我想命名我的文件以使用此变量导出,但它不起作用。如果有人帮助我,我真的很感激。
rep_date = 30APR2015:00:00:00
Outfile = work.A042015.sas7
%let var = CATS("A",MONTH(DATEPART(&rep_date)),YEAR(DATEPART(&rep_date)));
data WORK.&var(compress=yes);
set WORK.have;
run;
答案 0 :(得分:1)
宏变量只是字符串。因此,如果要在宏代码中执行函数,则需要将函数包装在%SYSFUNC()宏函数内。
---------------
| Column 1 |
---------------
| Column 2 |
---------------
| Column 3 |
---------------
| Column 4 |
---------------
答案 1 :(得分:0)
作为一个更广泛的问题,OPEN STATEMENT RECURSION DETECTED
指的是将宏变量分配给自身的情况。
%let &mvar = &mvar;
当然,这通常不会故意发生(人们会想到)。当它确实发生时,通常它是两类错误之一的标志。
%let
语句末尾没有“看到”分号的内容。然后你的下一个语句在宏上下文中使用宏变量,SAS将其视为%let
语句的一部分,这会导致出现此错误消息。%mend
。1可能发生在这样简单的情况下:
%let mvar=mydataset
%put &mvar;
糟糕。如果它就这么简单,那么只需弹出分号就可以了。但是,它可能是由更重要的东西引起的 - 例如无法匹配的括号或引号 - 这可能需要重新启动SAS会话。 (有时提交magic string
,%*;*;*';*";%*%mend;*);
的变体,会解决问题,有时不会。重新启动SAS是解决这个问题的可靠方法。
上面的2也是如此 - 如果魔术字符串没有修复它,那么您可能只需要重新启动SAS会话。当然,你仍然需要找到无与伦比的引用/括号/等等,但你首先需要启动SAS,这样你才能弄明白。