2017-02-14 98 views
1

這是一個相當愚蠢的例子,但它保存了什麼,我試圖做(使用SAS大學版)的essense:SAS宏變量做不能解決

data TableList; 
input tables $ cols $; 
cards; 
tab1 col 
tab2 cul 
; 
run; 


%macro test; 
    proc sql; 
     select tables 
     into:tabs separated by " "   
     from TableList; 
    quit; 

    %do i=1 %to 2;   
     %let t = %scan(&tabs,&i);  
     proc sql; 
      select cols 
     into: col   
      from TableList 
      where tables='&t'; 
     quit; 
     %put &col;   
    %end; 
%mend; 
%test; 

這樣做的問題是,當我運行這個代碼我得到這個錯誤信息:

WARNING: Apparent symbolic reference COL not resolved. 
&col 

這是爲什麼。在運行時不會改變&它的真實價值嗎?

更新: 設置「& t」而不是'& t'解決了我的問題。代碼現在正在工作。

data TableList; 
input tables $ cols $; 
cards; 
tab1 col 
tab2 cul 
; 
run; 

%macro test; 
    proc sql; 
     select tables 
     into:tabs separated by " "   
     from TableList; 
    quit; 
    %do i=1 %to 2;   
     %let t = %scan(&tabs,&i);  
     proc sql; 
      select cols 
     into: col   
      from TableList 
      where tables="&t"; 
     quit; 
     %put Column &col;   
    %end; 
%mend; 
%test; 

回答

1

這裏

where tables='&t'幾個問題並不會因爲單引號的工作。每當使用宏變量時,您必須使用雙引號。

另外&t沒有定義

這似乎是工作(即打印在日誌中cul),但我不得不手動定義t

data TableList; 
    input tables $ cols $; 
    cards; 
tab1 col 
tab2 cul 
; 
run; 

%let t=tab2; 

%macro test; 

    proc sql; 
     select tables 
      into:tabs separated by " "   
     from TableList; 
    quit; 

    %do i=1 %to 2; 
     %let t = %scan(&tabs,&i); 

     proc sql; 
      select cols 
       into: col   
      from TableList 
       where tables="&t"; 
     quit; 

     %put &col; 
    %end; 
%mend; 

%test;