提取

2016-06-14 100 views
1

我已經定義宏變量提取

%let data_names = fuzzy_Data_segment EMWS2.Clus_TRAIN; 

然後我已經寫了宏提取並從上面的宏變量作爲打印值:

%macro calling_data; 
    %do i = 1 %to 2; 
    %let data_name&i = %qscan(&data_names,&i); 
    %put &&data_name&i; 
    %end; 
%mend; 
%calling_data; 

我的宏代碼可以打印名字(fuzzy_Data_segment),但是,它只打印第二個名字的一部分(EMWS2)。我應該怎麼做打印整個第二個名字

回答

2

您的問題是SAS認爲一個時間段是宏變量中默認的分隔符之一。在這種情況下,它看起來像你想用空格分隔在data_names項目是,如此規定:

%let data_name&i= %qscan(&data_names,&i., %str()); 

你也在你%let聲明,並在您的來電calling_data缺少分號。

+0

您可能會添加一個點沿着默認分隔符(** blank!$%&()* +, - 。/; <^ | **),這就是爲什麼宏未按預期工作。 – kl78

+0

絕對值得一提 - 謝謝@ kl78 – superfluous

+0

您不想在宏語言中使用物理引號作爲%QSCAN的參數。你想使用引用函數%STR() –