установить длину 1d массива с переменной - PullRequest
0 голосов
/ 16 мая 2018

Я хотел бы установить длину массива в зависимости от того, какое значение я получаю при чтении набора данных: число , в котором есть одна переменная num с одним числовым значением.Но я получаю сообщение об ошибке: я не могу инициировать массив probs.Могу ли я получить какие-либо предложения о том, как решить эту проблему?(Я действительно не хочу жестко задавать длину массива пробников)

data test;
 if _n_=1 then do;
 set work.number;
 i =  num +1;
 end;

array probs{i} _temporary_ .....

1 Ответ

0 голосов
/ 16 мая 2018

Шаговые массивы данных SAS не могут быть динамически измерены во время выполнения шага.

Один из распространенных подходов состоит в том, чтобы поместить вычисленное количество строк набора данных в макропеременную перед шагом данных.

Я не уверен, что вы делаете с probs.

  • Какие значения будут входить в элементы массива?
  • Вам нужно все prob данных при итерации по каждой строке набора данных?
  • Вычисляется ли один результат из данных Probs ?

Пример. Вычислить количество строк в данных ноль с использованием nobs установленной опции:

data _null_;
  if 0 then set work.number nobs=row_count;
  call symputx ('ROW_COUNT', row_count);
  stop;
run;

data test;
  array probs (&ROW_COUNT.) _temporary_;

  * something with probs[index] ;
  * maybe fill it ?
  do index = 1 by 1 until (last_row);
    set work.number;
    probs[index] = prob; * prob from ith row;
  end;

  * do some computation that a procedure isn't able to;
  …
  result_over_all_data = my_magic; * one result row from processing all prob;
  output;
  stop;
run;

Конечно, фактическое использование массива будет различным.

Многие другие способы получить row_count включают dictionary.table представлений, sql select count(*) into и различные ATTRN вызовов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...