макропеременная как числовое значение внутри шага данных - PullRequest
0 голосов
/ 27 марта 2019

Я прошу небольшой помощи. ссылка, где вопрос В вышеприведенном посте у меня есть небольшая проблема с набором динамических переменных, которые я буду считать используемые столбцы.Как я могу это сделать?

data want;
  set have;
  array V varr1-varr3;
 call SYMPUTN('countxxx',dim(V)) /* here I try set numeric*/
  array L[&countxxx.] _temporary_;/* here input numeric*/

  * save first rows values in temporary array for use in other rows;
  if _n_ = 1 then 
    do index = 1 to dim(V);
      L[index] = V[index];
    end;

  * … for example … ;

  array delta_from_1st [&countxxx.];  * array statement implicitly creates three new variables that become part of PDV and get output;
  do index = 1 to dim(V);
    delta_from_1st[index] = V[index] - L[index];
  end;      
run;

1 Ответ

2 голосов
/ 27 марта 2019

Это не символ против числовой проблемы.Все макропеременные являются символьными, но так как ваше значение - все цифры, компилятор SAS будет интерпретировать текст, который он генерирует, как число, так как вы не заключаете его в кавычки.

Реальная проблема заключается в том, что вы пытаетесь ссылатьсяМакропеременная COUNTXXX до того, как вы ее создали.Ссылки на макросы разрешаются до начала выполнения шага данных.Разделите свой шаг на два шага.

data _null_;
  set have;
  array V varr:;
  call SYMPUTX('countxxx',dim(V)) ;
  stop;
run;

data want;
  set have;
  array L[&countxxx.] _temporary_;
...
...