从SAS宏变量中提取值

从SAS宏变量中提取值,sas,sas-macro,Sas,Sas Macro,我已经定义了宏变量 %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; %men

我已经定义了宏变量

%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)。要打印整个第二个名称,我应该怎么做?您的问题是SAS将句点视为宏变量中的默认分隔符之一。在本例中,您似乎希望使用空格来分隔数据_名称中的项,因此请指定:

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

您的
%let
语句和对
调用_data

的调用中也缺少分号,您可以在默认分隔符上添加一个点(空白!$%&()*+,-./;<^号),这就是宏无法按预期工作的原因。您不希望使用宏语言中的物理引号作为%QSCAN的参数。您想使用引号函数%STR()