means create sas proc-sql

create - sas proc sql like



¿Cómo interactúa macro de SAS con literales de formato? (5)

Ejecutando localmente en una sesión limpia:

%let x = %str(put(age, best.)); proc sql; select &x from sashelp.class; quit;

Esto genera el siguiente error:

1 put(age, best.) ---- 22 ---- 76 ERROR 22-322: Syntax error, expecting one of the following: a format name, ?. ERROR 76-322: Syntax error, statement will be ignored.

Pero esta versión "resuelta manualmente" se ejecuta sin notas, advertencias o errores:

proc sql; select put(age, best.) from sashelp.class; quit;

¿Alguien puede explicar exactamente qué está haciendo% str () en este programa que causa un problema en el momento de la ejecución? Disculpas por la pregunta vaga, pero no estoy seguro de cuáles son las interacciones relevantes; No puedo replicar usando una sintaxis de paso de datos equivalente, así que quizás estén involucradas peculiaridades de SQL de proceso.


¿Puedes usar una declaración de formato en su lugar? Por ejemplo, esto funciona bien.

%let x = %str( age format=best.); proc sql; select &x. from sashelp.class; quit;


La función% str () enmascara una cadena de caracteres durante la compilación de macros. Elimine la función% str () en la instrucción let o agregue una función% unquote () en la selección sql para tener si resolver correctamente.


Por alguna razón, a SAS no le gusta lo "mejor". formato.

es decir, cuando intento esto, tu código funciona

%let x = %str(put(age, 8.));

????


Respondido a esta pregunta en runsubmit.com :

Voy a marcar esta respuesta como correcta porque me llevó a esta página de documentación: http://support.sas.com/documentation/cdl/en/mcrolref/61885/HTML/default/viewer.htm#tw3514- unquote.htm - "En casos raros, el enmascaramiento de texto con una función de macro cita cambia la forma en que el escáner de palabra empareja el texto ... El escáner de palabra no lo usa como el límite de un token literal en la pila de entrada". Suena como un error, francamente, pero si el algoritmo tokenizer es tan antiguo y peludo como me lo imagino, ¡también lo convertiría en una rareza!


Si agrega esto a su código

%put _user_ ;

Verá cómo & x es citado por% str, en el registro. Es por eso que el código proc sql no funciona. El uso de% Unquote en la parte de selección de la instrucción proc sql permitirá que se ejecute el código.

http://www2.sas.com/proceedings/forum2007/152-2007.pdf