ejemplos - SAS macro procesamiento indirecto
ejemplos de macros en sas (1)
Esta pregunta ya tiene una respuesta aquí:
- sas MACRO ampersand 1 respuesta
Tengo una pregunta en un documento de examen que pregunta qué se lee en el registro de SAS
%let test=one;
%let one=two;
%let two=three;
%let three=last;
%put what displays is &&&&&test;
Me sorprendió mucho descubrir que la respuesta era: dos porque hubiera pensado que esta referencia podría resolverse por completo. SAS también está de acuerdo con la respuesta de ser dos .
¿Alguien puede explicar cómo SAS llega a la respuesta dos ya que todas las notas de teoría que he leído sugieren que el macroprocesador debería hacer lo siguiente
- scan1 &&&&& test -> &&&& test (es decir, && se resuelve en & y le dice al procesador que continúe escaneando de derecha a izquierda)
- scan2 &&&& test -> &&& one
- scan3 &&& one -> && two
- scan4 && two -> & three
- scan5 y tres -> último
Usar la opción symbolgen puede ayudar a ver qué está sucediendo en el registro:
1 options symbolgen;
2 %let test=one;
3 %let one=two;
4 %let two=three;
5 %let three=last;
6
7 %put what displays is &&&&&test;
SYMBOLGEN: && resolves to &.
SYMBOLGEN: && resolves to &.
SYMBOLGEN: Macro variable TEST resolves to one
SYMBOLGEN: && resolves to &.
SYMBOLGEN: Macro variable ONE resolves to two
what displays is two
Yendo de izquierda a derecha y usando corchetes para mostrar los tokens:
&&&&&test
(&&)(&&)(&test)
(&) (&) (one)
&&one
(&&)(one)
(&)(one)
&one
two