macro ejemplos sas sas-macro

ejemplos - SAS macro procesamiento indirecto



ejemplos de macros en sas (1)

Esta pregunta ya tiene una respuesta aquí:

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