rename
не является динамическим исполняемым оператором. Другими словами, шаг данных во время выполнения не может добавлять или иным образом изменять вектор данных программы (pdv), который создается во время автоматической компиляции.
Вы решили подчинить TRANSPOSE роли простого получения одной строки на переменную (что действительно интересно) для манипулирования данными.
Конечной целью простого изменения имен переменных является рутинная работа с метаданными, лучше подходящая для Proc DATASETS
. Переписывая весь набор данных, просто изменить имена столбцов можно с небольшими данными, но для больших наборов данных это не очень хорошая идея.
Таким образом, настоящая задача состоит в том, чтобы изменить список токенов, разделенных пробелами, на новый список элементов <token>=<newtoken>
, которые можно использовать в операторе переименования.
%let renamelist = %sysfunc(prxchange(s/(\w+)\b/$1=$1&SUFFIX/,-1,&VARS));
и
proc datasets nolist lib=work;
modify test;
rename &renamelist;
run; quit;