提取

2016-06-14 99 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() –