significado - Cuando la instrucción de salida se especifica en el bucle SAS Do, ¿por qué difiere el valor almacenado para la variable de índice?
instruccion cin en c++ (3)
En el conjunto de datos Work.Invest, ¿cuál sería el valor almacenado para Year?
datos work.invest; hacer año = 1990 a 2004; capital + 5000; capital + (capital * .10); fin; correr;
- a. desaparecido
- segundo. 1990
- do. 2004
- re. 2005
La respuesta correcta dada en la guía de preparación de bases SAS es d.2005 .
En la pregunta siguiente, el valor almacenado se da como 2004. ¿Cuál de las siguientes afirmaciones es falsa con respecto al programa que se muestra a continuación?
datos work.invest; hacer año = 1990 a 2004; capital + 5000; capital + (capital * .10); salida; fin; correr;
- a. La instrucción OUTPUT escribe valores actuales en el conjunto de datos inmediatamente.
- segundo. El valor almacenado para Year es 2005.
- do. La instrucción OUTPUT anula la salida automática al final del paso
DATA
. - re. El
DO loop
realiza 15 iteraciones.
La respuesta correcta para esto es b.2005. (identificar la declaración falsa es la pregunta).
Como se explica en el manual de SAS http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000194540.htm
Sin embargo, una vez que utiliza una instrucción OUTPUT para escribir una observación en cualquier conjunto de datos, no hay una instrucción OUTPUT implícita al final del paso DATA
Por lo tanto, año = 2005 en su primer ejemplo, y max (año) = 2004 en su segundo ejemplo.
Conceptos clave:
- El contador se incrementa al final del ciclo.
- La instrucción OUTPUT anula la salida implícita al final del paso de datos y escribe el estado actual de todas las variables en el conjunto de datos.
En la primera pregunta, eso significa que al final del ciclo, se incrementa a 2005, va a la declaración DO y dice STOP porque la condición DO no se cumple. Al final del paso de datos, la salida se genera con el contador en Año = 2005.
En la segunda pregunta, porque la instrucción OUTPUT está antes del final del contador, por lo que el resultado del valor es Año = 2004. Además, la instrucción de salida generará una fila para cada valor de Año, de modo que el ''valor almacenado'' no sea una buena pregunta porque habrá filas de Año = 1990 a 2004 en el conjunto de datos de salida.
primero codifica,
data work.invest;
do year=1990 to 2004;
Capital+5000;
capital+(capital*.10);
end;
run;
Cómo funciona
La variable "año" se incrementará cada vez que finalice la ejecución de las instrucciones de ciclo
Durante el paso final, es decir, cuando año = 2004, las dos instrucciones dentro del ciclo do se ejecutarán y ahora el valor anual se incrementará a año = 2005. sin embargo, este valor 2005 no satisfará la condición de bucle. por lo tanto, la ejecución de do loop ha terminado.
SAS ahora llega al final del paso de datos (No hay otras instrucciones para ejecutar). Ahora se ejecutará la instrucción de salida IMPLICIT.
Tenemos dos variables aquí "año" y "Capital". Ambas variables con los últimos valores se escribirán en el conjunto de datos
el último valor para el año es 2005.
Resultado:
año Capital
2005 174748.6493
ahora tu segundo código,
data work.invest;
do year=1990 to 2004;
Capital+5000;
capital+(capital*.10);
output;
end;
run;
Nota: si hay una instrucción de salida EXPLICIT dada, SAS no ejecutará la salida IMPLICIT.
Cómo funciona
La variable "año" se incrementará cada vez que finalice la ejecución de las instrucciones de ciclo
Después de la segunda línea "capital + (capital * .10);" La declaración de salida IMPLICIT se ejecutará. por lo tanto, obtendremos 15 observaciones
Durante el paso final, es decir, cuando año = 2004, se ejecutarán las dos instrucciones dentro de la declaración do loop + output y ahora el valor anual se incrementará a year = 2005. sin embargo, este valor 2005 no satisfará la condición de bucle. por lo tanto, la ejecución de do loop ha terminado.
Como hay una declaración de salida EXPLÍCITA, SAS ya no hará más salida (IMPLÍCITO)
Resultado:
año Capital
1990 5500
.....
2003 153862.4085
2004 174748.6493