Pedido de comando

El orden de comandos es más a menudo una cuestión de sentido común y sigue esta secuencia lógica: definición de variable, transformación de datos y análisis estadístico. Por ejemplo, no puede etiquetar, transformar, analizar o utilizar una variable de ninguna manera antes de que exista. Se aplican las siguientes normas generales:

  • Mandatos que definen variables para una sesión (DATA LIST, GET, GET DATA, MATRIX DATA, etc.) deben preceder a los comandos que asignan etiquetas o valores perdidos a esas variables; también deben preceder a los comandos de transformación y procedimiento que utilizan esas variables.
  • Mandatos de transformación (IF, COUNT, COMPUTE, etc.) que se utilizan para crear y modificar variables deben preceder a los mandatos que asignan etiquetas o valores perdidos a dichas variables, y también deben preceder a los procedimientos que utilizan dichas variables.
  • Generalmente, el resultado lógico del proceso de mandatos determina el orden de los mandatos. Por ejemplo, un procedimiento que crea nuevas variables en el conjunto de datos activo debe preceder a un procedimiento que utilice esas nuevas variables.

Además de observar las reglas anteriores, a menudo es importante distinguir entre los mandatos que hacen que se lean los datos y los que no, y entre los que se almacenan pendientes de ejecución con el siguiente mandato que lee los datos y los que entran en vigor inmediatamente sin requerir que se lean los datos.

  • Los mandatos que hacen que los datos se lean, así como ejecutar transformaciones pendientes, incluyen todos los procedimientos estadísticos (por ejemplo, CROSSTABS, FREQUENCIES, REGRESSION); algunos mandatos que guardan/escriben el contenido del conjunto de datos activo (por ejemplo, DATASET COPY, SAVE TRANSLATE, SAVE); AGGREGATE; AUTORECODE; EXECUTE; RANK; y SORT CASES.
  • Los mandatos que se almacenan, pendientes de ejecución con el siguiente mandato que lee los datos, incluyen mandatos de transformación que modifican o crean nuevos valores de datos (por ejemplo, COMPUTE, RECODE), mandatos que definen acciones condicionales (por ejemplo, DO IF, IF, SELECT IF), PRINT, WRITEy XSAVE. Para obtener una lista completa de estos mandatos, consulte Mandatos almacenados, pendientes de ejecución .
  • Los mandatos que entran en vigor inmediatamente sin leer los datos o ejecutar mandatos pendientes incluyen transformaciones que alteran la información de diccionario sin afectar a los valores de datos (por ejemplo, MISSING VALUES, VALUE LABELS) y mandatos que no requieren un conjunto de datos activo (por ejemplo, DISPLAY, HOST, INSERT, OMS, SET). Además de entrar en vigor inmediatamente, estos mandatos también se procesan incondicionalmente. Por ejemplo, cuando se incluye dentro de una estructura DO IF , estos mandatos se ejecutan independientemente de si se cumple o no la condición. Para obtener una lista completa de estos mandatos, consulte Mandatos que entran en vigor inmediatamente .

Ejemplo

DO IF expense = 0.
- COMPUTE profit=-99.
- MISSING VALUES expense (0).
ELSE.
- COMPUTE profit=income-expense.
END IF.
LIST VARIABLES=expense profit.
  • COMPUTE precede a MISSING VALUES y se procesa primero; sin embargo, la ejecución se retrasa hasta que se leen los datos.
  • MISSING VALUES entra en vigor tan pronto como se encuentra, incluso si la condición nunca se cumple (es decir, incluso si no hay casos en los que expense=0).
  • LIST hace que los datos se lean; por lo tanto, tanto COMPUTE como LIST se ejecutan durante el mismo paso de datos.
  • Puesto que MISSING VALUES ya está en vigor en este momento, la primera condición de la estructura DO IF nunca se cumplirá, porque un valor de gasto de 0 se considera que falta y, por lo tanto, la condición se evalúa como que falta cuando gasto es 0.