Проблема разрешения макропеременной SAS в шаге данных - PullRequest
0 голосов
/ 31 марта 2020

Существуют похожие именованные макропеременные, такие как temp1, temp2 et c ..

temp1 = xyz; temp2 = abc;

Теперь я хочу сохранить эти значения макропеременных в наборе данных.

Я попытался записать что-то, как показано ниже:

%let n=2;
data current_data;
do=1 to &n.;
myvalues="&&temp&i.";
run;

Но это не работает. Кажется, что я не получаю разрешение в том же наборе данных, как объявлено, так же как и функция symput вызова.

Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 31 марта 2020

Для динамического получения значения макропеременной во время выполнения в шаге данных используйте функцию symget(), обратную функции call symputx(). Вы можете использовать cats(), чтобы помочь вам создать имя макропеременной из целочисленного значения.

data current_data;
  do=1 to &n.;
    length myvalues $200;
    myvalues=symget(cats('temp',i));
    output;
  end;
run;

Вы можете использовать макрос logi c, чтобы сгенерировать некоторый код обоев. Обратите внимание, что вы должны определить макрос для использования% DO l oop.

%macro expand;
   data current_data;
     length i 8 myvalues $200;
  %do i=1 %to &n;
     i=&i;
     myvalues="&&temp&i";
     output;
  %end;
   run;
%mend expand;
%expand;
...