Извлечение значений из переменной 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;
 %mend;
 %calling_data;

Мой код макроса может печатать первое имя (fuzzy_Data_segment), но он печатает только часть второго имени (EMWS2). что мне делать, чтобы напечатать полное имя


person Pruthvi    schedule 14.06.2016    source источник


Ответы (1)


Ваша проблема в том, что SAS считает точку одним из разделителей по умолчанию в макропеременных. В этом случае похоже, что вы хотите использовать пробел для разделения элементов в data_names, поэтому укажите это:

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

Вам также не хватает точек с запятой в операторе %let и при вызове calling_data.

person Sean    schedule 14.06.2016
comment
Вы можете добавить, что точка находится вдоль разделителей по умолчанию (blank! $% & () * +, -. /; ‹^ ¦), и поэтому макрос не работал должным образом. - person kl78; 14.06.2016
comment
Вы не хотите использовать физические кавычки в макроязыке в качестве аргумента для% QSCAN. Вы хотите использовать функцию цитирования% STR () - person data _null_; 14.06.2016