2012-05-03 5 views
5

Supongamos que estoy intentando resumir una variable (llámala var_1) en un conjunto de datos muy grande (casi un terabyte). El conjunto de datos es largo y ancho. Mi código se vería así:¿El uso de la opción KEEP en los conjuntos de datos SAS mejora el rendimiento de lectura?

es leído
PROC MEANS DATA=my_big_dataset SUM; 
    VAR var_1; 
RUN; 

¿Me conseguir cualquier mejora en el rendimiento en absoluto mediante la opción KEEP en el conjunto de datos? Es decir:

PROC MEANS DATA=my_big_dataset (KEEP=var_1) SUM; 
    VAR var_1; 
RUN; 

En términos de disco I/O, que se imaginan que cada registro debe ser leído en su totalidad, no importa qué. Pero quizás se necesita asignar menos memoria para leer los registros. Cualquier consejo es apreciado.

Respuesta

5

Sí, hace la diferencia. La mayoría de las veces no es una gran diferencia, pero si comienza a tener conjuntos de datos muy amplios o muy largos, comenzará a ver algún beneficio.

Buscar keep= en el siguiente enlace ...

http://support.sas.com/techsup/technote/ts298.html

Si usted está teniendo problemas de rendimiento, entonces este puede restar fracciones de segundo o segundos de lo que está haciendo, pero no va a cortar su tiempo de procesamiento a la mitad. Busque otras técnicas de optimización si lo necesita.

3

En términos de un paso de datos, todas las variables se leerán en el PDV a menos que especifique una instrucción DROP o KEEP.

Para procedimientos, I espera SAS es lo suficientemente inteligente como para leer solo las variables utilizadas en el procedimiento. ¿Quizás alguien pueda confirmar esto?

Puede construir fácilmente algunas pruebas para determinar esto.

+0

Buena sugerencia: intentaré hacer algunas evaluaciones comparativas en el transcurso de las próximas lecturas de este conjunto. –

3

No encuentro nada que indique que la instrucción KEEP sea más eficiente (o necesaria) para PROC MEANS.

Puede, sin embargo, ganar eficiencia usando una declaración WHERE, así como también usar otras dentro del código MEANS.

1

Creo que una sentencia where es generalmente más eficiente que una opción mantener. Pero en este caso, un dónde es inútil, y no estoy seguro de agregar una opción mantener en la llamada de proceso cambiará algo.

Pero puede probar y verificar el tiempo de proceso en el registro. ¡Déjanos saber!

Editar:

me hice una prueba con uno de los más grandes de datos que tengo. Con una opción de mantener que obtuve: 0.03 tiempo de proceso Sin una opción de mantener que obtuve: 0.01 tiempo de proceso

Supongo que SAS ya está optimizado para este caso.

Cuestiones relacionadas