¿Cuál es tu mejor truco para salir de un desequilibrio en el presupuesto de la condición en BASE SAS?

StackOverflow https://stackoverflow.com/questions/107414

  •  01-07-2019
  •  | 
  •  

Pregunta

Como base SAS programador, usted sabe el taladro:

Envíe su código SAS, que contiene un desequilibrio en el presupuesto, por lo que ahora tenemos no sólo y no cerradas cita, pero también abiertos los comentarios, macro definiciones de función, y una falta de ejecución;o dejar de fumar;declaración.

¿Cuál es tu mejor truco para no tener esos desequilibrados citas te molesta?

¿Fue útil?

Solución

enterprise guía 3 se utiliza para poner la siguiente línea en la parte superior de su código generado automáticamente:

*';*";*/;run;

sin embargo, la única manera de realmente "reset" de todas las clases de algo desequilibrada problemas es salir del sas de la sesión, y el balance de lo que está desequilibrada, antes de volver a enviar el código.El uso de este tipo de quick (barato?) hacks no tratar la causa raíz.

por el camino, ods _all_ close; cierra todos la ods de los destinos, incluyendo el defecto, los resultados de destino.en una sesión interactiva, usted debe abrir de nuevo con ods results; o ods results on; al menos de acuerdo a la documentación necesaria.pero cuando he probado en mi 9.2, que no funcionó, como se muestra a continuación:

%put sysvlong=&sysvlong sysscpl=&sysscpl;
/* sysvlong=9.02.01M0P020508 sysscpl=X64_VSPRO */

ods _all_ close;
proc print data=sashelp.class;
run;
/* on log
WARNING: No output destinations active.
*/

ods results on;
proc print data=sashelp.class;
run;
/* on log
WARNING: No output destinations active.
*/

Otros consejos

En cuanto a mí, yo normalmente Google para "SAS desequilibrada cita", y terminamos con la presentación de algo como este:

*); */; /*’*/ /*”*/; %mend;

...para salir de unclosed comentarios, citas y funciones de macro.

Aquí es el que yo uso.

 ;*';*";*/;quit;run;
 ODS _ALL_ CLOSE;
 QUIT; RUN;

Tuve una situación con desequilibrado citas en una macro y la única solución era cerrar la instancia de SAS y empezar de nuevo.

Siento que es inaceptable error en SAS.

Sin embargo, he utilizado los métodos por TANTO #2 y #5 y funcionó.#2 primero y luego el #1.Los pongo por encima de TODO el código, incluyendo mi código de encabezado, explicando lo que este programa estaba haciendo.

Trabajó como un encanto.

Escribí un programa perl que se lee a través de cualquier programa SAS y sigue la pista de las cosas que vienen en pares.Con cosas como los paréntesis, que puede ser incrustado, se imprime el nivel de anidación en el comienzo de cada línea.Necesita para ser capaz de distinguir entre paréntesis, que son parte de las funciones de macro de los que se parte de los datos de paso de funciones, incluyendo la %sysfunc llamadas que residen en el entorno macroeconómico, pero hacer llamadas a los datos de paso de las funciones (que también deben hacer similar para %syscall función de macro de invocaciones), pero que es factible a través de expresiones regulares.Si el nivel de anidamiento sale negativo, es un indicio de que el problema puede estar en los alrededores.

También comienza a contar las comillas dobles y simples desde el inicio del programa y se identifica si el recuento de cada símbolo que se encuentra es par o impar.Como con paréntesis, debe ser capaz de distinguir las cotizaciones que forman parte de código de macro de los que se parte de los datos de paso de código y también aquellos que son parte de cadenas literales, tales como O'Riley y %nrstr(%'%") y no contar con ellas, pero la coincidencia de patrón puede manejar eso también.

Si el problema de los que no coinciden punto se deriva de código que se genera en tiempo de ejecución mediante código de macro y por lo tanto no se presente en el programa de origen, entonces puedo activar la opción de mfile para escribir los datos generados por el paso de código a un archivo y, a continuación, ejecute la secuencia de comandos perl en contra de ese código.

Elegí perl debido a su fuerte coincidencia de patrón de capacidades sino de cualquier otro patrón de juego de lenguaje debería funcionar bien.Espero que esto ayude.

Usted podría simplemente emitir un terminar declaraciones presentadas comando y volver a lo que usted está tratando de ejecutar.

sólo quería reiterar AFHood la sugerencia de utilizar el ODS _ALL_ CLOSE; declaración.Esa es una de las principales a incluir.Y asegúrese de que se usen cada vez que haya terminado con ODS de todos modos.

El cierre de la SAS Sesión funcionó en mi caso.Creo que usted puede probar esto de una vez antes de intentar otros métodos mencionados aquí.

Sí, creo que el oficial SAS documentación recomienda la solución que han propuesto para usted.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top