2016-10-10 145 views
0

我有過去可以正常工作(如一週前) 和代碼中的問題,現在一個新的計算機上,它不anyomoreSAS宏變量沒有解決

創建我的宏觀變量與SQL

proc sql noprint;  
select count(distinct(num_nation)) into :nb_country from AFGp 
; 
%let nb_country = &nb_country; 
select distinct(num_nation) into :pays1 - :pays&nb_country from AFGp; 
select count(*) into :nbvar from variables; 

%let nbvar=&nbvar; 

select variable, var_label, lbl_categ into :var1 - :var&nbvar, :lab1 - :lab&nbvar, :labc1 - :labc&nbvar from variables 
; 
quit; 
run; 

和該宏不承認宏觀變量開始使用var:

%macro testtest(); 

%do j = 1 %to %eval(&nb_country); 

    %do i = 2 %to %eval(&nbvar); 
     proc freq data=AFGp noprint; 
      tables &&var&i./nocol nocum nofreq nowarn out=_TFP_&j._&i; 
      where num_nation = &j; 
     run; 
     %end; 
    %end; 

%mend; 

例如: 這個

%let j=4; 
%put &j &var4 &&var&j; 

返回此:

4 Female &&var4 

此代碼用於正常解決,我不明白爲什麼它不anyomore。

如果你能幫助我,甚至把我放在正確的方向,這已經阻止了我3小時,現在

回答

1

語法問題可以得到解析器混出來的,你需要運行魔術字符串(如explained由Joe)復位:

%*;*;*';*";%*%mend;*); 

這可能不是你的代碼的問題 - 它可以是觸發(例如在Base SAS中),方法是突出顯示並運行「部分」代碼塊。

+0

謝謝!如果我再次交談,這肯定會有所幫助。至於失蹤者;當我粘貼代碼(覆蓋)時,它消失了。它在代碼中,我沒有警告 –

+1

已經更新了我的答案,省略了關於';'的部分。快樂編碼:-) –

0

我重新啓動SAS,現在同樣的代碼工作。

我仍然不知道爲什麼它沒有工作之前,或者即使這是一個難以解決的問題,但顯然SAS的座右銘是「當有疑問重啓!

+1

有時你會得到一個未封閉的引用,宏定義或其他掩蓋宏設施的東西。重新啓動是解決它的最簡單方法。 – DomPazz

+0

謝謝。這將有助於未來! –