我正在尝试使用%DO循环追加多个每月数据文件。这里是我到目前为止的代码:SAS%DO循环检索多个数据集
options mprint symbolgen source mlogic merror syntaxcheck ;
%MACRO INT;
%DO i=01 %TO 03 %BY 1;
libname appd "Qual1.Qual2.Qual3.QUAL416&i." disp=shr;
data work&i.;
set appd.file;
run;
data final;
set work;
run;
proc append data=work&i.
base=final;
run;
%MEND;
%INT;
我得到一个错误:
警告:目前正在处理的引用字符串变得更加 超过262个字符。您可能有不平衡的报价 分数。
我从来没有收到过这个错误,我不完全确定它是什么意思。我试图创建这个宏来追加今年的几个文件,但理想情况下它会跨越多年。即改变mtro16 & i。到mtro & i。除了我不想明确地编码%DO i=1601 %TO 1612 %BY 1
,因为我将不得不每年改变它,例如,如果我从2010年开始,我将不得不在2010年编码2010年,然后单独编制%DO
2011年的声明等,直到2016年。这听起来不是很多,但十年以上> +它可以。
更新:我改变了我的代码,以将此位:
`%DO i=1005 %TO 1607;
%IF i=1013 %THEN %DO i=1101 %TO 1112;
/*%ELSE %IF i=1113 %THEN %DO i=1201 %TO 1212;*/
/*%ELSE %IF i=1213 %THEN %DO i=1301 %TO 1312;*/
/*%ELSE %IF i=1313 %THEN %DO i=1401 %TO 1412;*/
/*%ELSE %IF i=1413 %THEN %DO i= 1501 %TO 1512;*/
/*%ELSE %IF i=1513 %THEN %DO i=1601 %TO 1607;*/`
这是一种janky的,但我认为这是可行的,只循环到今年年底,然后i=1012 to i=1101
后开始下一个迭代。然而,这是正在发生的事情在我的日志:
MLOGIC(INT): %DO loop index variable I is now 1012; loop will iterate again.
MLOGIC(INT): %IF condition i=1013 is FALSE
MLOGIC(INT): %DO loop index variable I is now 1013; loop will iterate again.
MLOGIC(INT): %IF condition i=1013 is FALSE
如何SAS治疗这种%IF
条件?它告诉我变量i = 1013
和%IF
条件i=1013
是否为假?为什么这不是真的?
我通常创建解析为一个字符串,字符串本身具有比指定的字符更宏观变量时收到这样的警告。它可以是完全有效的,并且工作正常,但SAS认为可能存在问题,因为它不是期望字符串的那么长。如果代码按预期行事,我不会担心,因为我认为你不能阻止它产生警告。也就是说,你没有%结束;关闭你的循环,所以它只是将它们连接在一起? –
SMH。我一直都在想这些 – DukeLuke
而且,do语句中的变量01在调用时会在宏中解析为1。所以你会通过mtro163结束mtro161。你需要添加一些东西,如果长度我<2然后做j = strip(0 || i)连接我怀疑的前导零,然后使你的libname mtro16&j。代替。 –