Оператор symput вызова создает макрос var & curr_r со значением rank, но он недоступен до окончания шага данных.
Однако я не думаю, что вам нужно создавать макрос var& curr_r.Я не думаю, что макрос нужен вообще.
Я думаю, что ниже должно сработать: (Не проверено)
DATA tmp;
SET term_table;
LENGTH freq 8;
BY &by_var term_type term;
RETAIN freq;
IF first.term THEN DO;
do j = 1 to rank;
<do some thing>
end;
END;
RUN;
Если вам нужно было использовать ранг из предыдущих наблюдений, используйтефункция LAG.
Start=Lag(rank);
Чтобы сохранить каждое значение RANK в макропеременной, это будет сделано ниже:
Proc Sql noprint;
select count(rank)
into :cnt
from term_table;
%Let cnt=&cnt;
select rank
into :curr_r1 - :curr_r&cnt
from term_table;
quit;