Я пытаюсь сделать цикл над списком, чтобы выполнить ранги для нескольких переменных.sas- rank внутри макроса
И тогда я делаю петлю:
options mprint;
%macro ranks(listado);
%let count=%sysfunc(countw(&listado));/*counw= count words in a string*/
%do i=1 %to &count;
%put 'count' &count;
%let vari=%qscan(&listado,&i,%str(,));
%put 'vari' &vari;
proc rank data=labo2.J_tabla_modelo groups=10 out=labo2.tmp;
var &vari.;
ranks rk_&vari.;
run;
%end;
%mend;
%ranks(%str(G_MERGE6_t1_monto6,A_CLI_monto_sucursal_1,A_CLI_monto_sucursal_2,
A_CLI_monto_sucursal_3, A_CLI_monto_sucursal_4,A_M_0705_monto));
Я получаю следующее сообщение об ошибке:
ERROR: Number of VAR statement variables was not equal to the number of RANKS statement variables.
Не знаю, как ее решить. Потому что, если я запускаю код, написанный макросом, работает.
Спасибо!
ОК, вы правы. Но поскольку у меня уже есть имена столбцов, я пробовал это: ** proc sql; выберите cats ('r_', name) в: lista_rank, разделенные символом '' from dictionary.columns, где libname = 'LABO2' AND MEMNAME = 'J_TABLA_MODELO' и имя, как '% monto%'; quit; ** но я получаю: ** Явная символическая ссылка LISTA_RANK не разрешена. ** – GabyLP
звучит так, как будто ваш PROC SQL работал неправильно. Имя, вероятно, является верхним регистром, для одного, хотя я думаю, что LIKE не должен заботиться об этом. – Joe
Это не значит, потому что этот: ** proc sql; выберите имя в: lista_monto, разделенное символом '' from dictionary.columns, где libname = 'LABO2' AND MEMNAME = 'J_TABLA_MODELO' и имя типа '% monto%'; quit; ** работает. ** Может быть, что-то связанное с кошками ??? не знаю. ** – GabyLP