Шаговые массивы данных 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
вызовов.