J'essaye de faire une boucle sur une liste pour effectuer des rangs pour plusieurs variables.sas- classer dans une macro
Et puis je fais la boucle avec:
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));
Je reçois l'erreur suivante:
ERROR: Number of VAR statement variables was not equal to the number of RANKS statement variables.
Je ne sais pas comment le résoudre. Parce que si je cours le code écrit par la macro fonctionne.
Merci!
ok vous avez raison. Mais puisque j'ai déjà les noms des colonnes, j'ai essayé ceci: ** proc sql; sélectionnez cats ('r_', name) dans: lista_rank séparés par '' de dictionary.columns où libname = 'LABO2' AND MEMNAME = 'J_TABLA_MODELO' et nom comme '% monto%'; quit; ** mais j'obtiens: ** La référence symbolique apparente LISTA_RANK n'est pas résolue. ** – GabyLP
sonne comme si votre SQL PROC ne fonctionnait pas correctement. Le nom est probablement en majuscule, pour un, mais je pense que LIKE ne devrait pas s'en préoccuper. – Joe
Ce n'est pas parce que celui-ci: ** proc sql; sélectionnez le nom dans: lista_monto séparé par '' de dictionary.columns où libname = 'LABO2' AND MEMNAME = 'J_TABLA_MODELO' et nom comme '% monto%'; quitter; ** fonctionne. ** Peut-être quelque chose en rapport avec les chats ??? ne sait pas. ** – GabyLP