2013-09-21 370 views
-1

當我運行以下代碼時,日誌中顯示三個錯誤: 錯誤:此%MEND語句沒有匹配的%MACRO語句。 錯誤:宏NO仍在執行,無法重新定義。 錯誤:將編譯一個虛擬宏。 我想知道這是否是黑洞問題。但我找不到任何語法錯誤。誰能告訴我有什麼問題?謝謝!sas中沒有匹配的%宏錯誤

%Macro table(x); 
    data m_&x; set A (where=(seqno=0)); 
    LENGTH DD_&x 8; 
    run; 
%mend table; 

data _null_; 
    Do u=1 to 17; 
    call execute ('%nrstr(%table('||u||'))'); 
    end; 
run; 


%macro sumup_DD (x, Startdate, Enddate,i); 
    data B; set A (where=(seqno=&i)); 
    DD_&x=sum(of &Startdate-&Enddate); 
    run; 
    proc append base=m_&x data=B; 
    run; 
%mend sumup_DD; 

%macro no; 
    %do n=1 %to 17; 
    data _null_; set A; 
     call execute('%nrstr(%sumup_DD ('||&n||','||rr&n||','||rr%eval(&n+1)||','||seqno||'))'); 
    run; 
    %end; 
%mend no; 
%no; 
+1

這聽起來像是你在早期的執行中做了錯誤的事,並且它影響了你連續運行的代碼。你能否確認這些確實是你在新的SAS會議中首次運行時遇到的錯誤? – mvherweg

+0

代碼中的第5行應該是'%修正表;'不是'%修正表;'。 – DomPazz

+0

@Shorack在首次運行的新SAS會話中,「%no」無法執行。它被識別爲宏命令的一部分。 – Jennyapple

回答

0

我發現了這個錯誤。這確實是黑洞問題,這是由我的一個評論中的單引號造成的!這個單引號使'%修正'被識別爲文字標記。因此,我運行的所有以下代碼被認爲是宏的一部分。