the - sas vuelos
Comillas sin igual SAS (2)
Después de intentarlo un par de veces, encuentro %superq
podría resolver este problema. Manejar caracteres especiales en macro es problemático. Esta página proporciona algunos consejos útiles sobre cotizaciones macro.
Simplifiqué su código aquí para el siguiente
ACTUALIZACIÓN: hazlo doble caso.
data test;
input name ~ & $15.;
datalines;
100% BLO
100% COLOR
AVON & RAGOBERT
BALLANTINE''S
L''OREAL
AT&T
U-V-A
;
run;
%macro name_modal();
/*Create macro variables which contain the modalities of variables*/
%do i=1 %to 4;
data _null_;
set test;
call symputx(''num_Mod1'',_N_,"G");
call symputx(''tableb''||compress(put(&i,4.))||''modal''||compress(put(_N_,4.)),name,"G");
run;
%end;
%do i=1 %to 4;
%do j=1 %to 7;
%put %superq(tableb&i.modal&j);
%end;
%end;
%mend name_modal;
%name_modal();
El resultado se mostrará correctamente.
Tenga en cuenta que es %superq(tableb&i.modal&j)
not %superq(&&tableb&i.modal&j)
ya que superq
acepta el nombre de la macrovariante sin el ampersand extra.
%macro name_modal();
/*Create macro variables which contain the modalities of variables*/
%do i=1 %to &num_Var;
data _null_;
set &lib..Table_variable_modal_&i.;
call symputx(''num_Mod''||compress(put(&i,4.)),_N_,"G");
call symputx(''table''||compress(put(&i,4.))||''modal''||compress(put(_N_,4.)),compress(&&name_Var&i.),"G");
run;
%end;
/*Display modalities by variable*/
%do i=1 %to &num_Var;
%put &&name_Var&i. has &&num_Mod&i. modalities ;
%do j=1 %to &&num_Mod&i.;
%put %nrstr(&&tableb&i.modal&j.);
%end;
%end;
%mend name_modal;
%name_modal();
Espero que el código sea autodocumentado. Explicaré los problemas aquí. Todo funciona bien hasta que paso al segundo programa que sirve para mostrar las modalidades por variables.
Por ejemplo, cuando el nombre de las modalidades que se almacenan en las variables macro es como
$ 100% BLO,
100% COLOR,
AVON Y RAGOBERT,
BALLANTINE''S,
L''OREAL,
AT & T,
UVA
etc
No uso% puesto correctamente. Intenté usar% bquote y% nrstr, pero el problema persiste. Hasta ahora, la única solución que puedo ver es modificar el nombre de las modalidades, pero dado que los nombres provienen de un cliente, no tengo la posibilidad de modificar los datos.
Gracias
Es difícil responder la pregunta para todos los datos de muestra porque no puedo recrear su código (macros globales faltantes).
[ACTUALIZAR] Es más difícil obtener macros para resolver, que incluyen caracteres que necesitan ser enmascarados. Publique un código que se pueda ejecutar y se le puede brindar más ayuda.
Aquí hay un buen enlace para macro cotizaciones.
Esto tiene un diagrama realmente bueno que detalla qué funciones de enmascaramiento macro usar para diferentes situaciones.
% Str funcionará incluso si se incluye un% o & en la cadena, siempre que estén seguidos de un espacio. % NRSTR si cualquiera podría interpretarse como una macrovariable o una macro llamada. Puede preceder una comilla simple ('') o una comilla doble (") con un signo de porcentaje (%), o usar BQUOTE o NRBQUOTE (si la cadena de caracteres incluye & o%).
Aquí hay un comienzo [ACTUALIZACIÓN] :
%Macro Test(var=);
%Put &var;
%Mend test;
%Test(Var=%str($100% BLO)) ;
%Test(Var=%str(100% COLOR)) ;
%Test(Var=%nrstr(100 %COLOR)) ;
%Test(Var=%str(AVON & RAGOBERT)) ;
%Test(Var=%nrstr(AVON &RAGOBERT)) ;
%Test(Var=%str(BALLANTINE%''S)) ;
%Test(Var=%bquote(BALLANTINE''S)) ;
%Test(Var=%str(L%''OREAL)) ;
%Test(Var=%bquote(L''OREAL)) ;
%Test(Var=%nrstr(AT&T)) ;
%Test(Var=%str(U-V-A)) ;