software military inglaterra check andalucia airline sas

military - Comprender los conjuntos de datos de salida SAS



sas uk (3)

SAS tiene varias formas que utiliza para crear conjuntos de datos de salida desde dentro de un procedimiento. No siempre está claro si un procedimiento en particular puede generar un conjunto de datos y, si parece que es capaz de hacerlo, no siempre es claro cómo.

Fuera de mi cabeza, aquí hay algunos ejemplos de cuán ampliamente puede variar la sintaxis.

Ejemplo 1

proc sort data = sashelp.baseball out = baseball_sorted; by league division ; run;

Ejemplo 2

proc means noprint data = baseball_sorted; by league division ; var nHits; output out = baseball_avg_hits (drop = _TYPE_ _FREQ_) mean = mean_hits ; run;

Ejemplo 3

ods exclude all; ods output statistics = baseball_statistics equality = baseball_ftest ; proc ttest data = baseball_sorted; class league; var nHits; run; ods exclude none;

Ejemplo 4

La opción PROC ANOVA OUTSTAT = .

Parece casi como si SAS hubiera implementado cada uno de estos gustos o no. ¿La sintaxis de SAS dicta cómo crear un conjunto de datos dirigido por un enfoque coherente que no estoy viendo o es realmente caprichoso y arbitrario?


De acuerdo con Quentin. Debe recordar que existen sistemas SAS que ejecutan código escrito en los años 80. SAS tendría un gran dolor de cabeza si forzaran a cada equipo a reescribir todos los procedimientos y luego obligarían a sus clientes a cambiar todo su código. SAS ha existido desde los años 60 y el crecimiento orgánico de la sintaxis es de esperar.

FWIW, tener una instrucción OUT= tiene sentido en cosas sin salida gráfica. IE PROC SORT o PROC TRANSPOSE .


La forma en que lo veo hay cuatro formas principales de especificar los conjuntos de datos de salida.

  1. En la instrucción PROC, puede especificar algún tipo de declaraciones u opciones de salida, como OUT = OUTEST =.
  2. En la declaración principal del procedimiento, es decir, MODELO / TABLA puede tener opciones que permitan la salida. es decir, PROC FREQ tiene un OUT = en la instrucción TABLE.
  3. Una instrucción OUTPUT explícita dentro de un procedimiento. Estos son típicamente de procedimientos más antiguos. es decir PROC MEDIOS
  4. Tablas de ODS que son un método relativamente nuevo, más utilizado en la actualidad ya que el formato se alinea con lo que esperaría ver.

Sí, hay varios lugares para verificar, pero afortunadamente la documentación de SAS para los procedimientos es relativamente clara con las opciones y cómo usar / especificar los resultados.

Si me he perdido algo que parece diferente, publico en los comentarios y puedo actualizar esto.

PD. Aunque SAS es definitivamente malo, intentar navegar por diferentes paquetes / módulos en Python para exportar un archivo XLSX tampoco es sencillo. Algunos paquetes admiten algunas opciones que otros no tienen. He dejado de preguntar por qué en estos días y simplemente lo acepto como peculiaridades de los diferentes idiomas en este punto.


Para el código PROC, la sintaxis para la salida de datos a menudo es específica de ese procedimiento, que a menudo se siente de mala gana. (Sus ejemplos 1, 2, 4) Creo que los desarrolladores de PROC tienen mucha libertad, y recuerden que muchos de estos PROCS tienen más de 30 años.

Lo mejor del Sistema de Entrega de Salida (ODS, su ejemplo 3) es que proporciona una sintaxis única para generar datos, independientemente del procedimiento. Entonces puede usar la declaración ODS OUTPUT con (¿casi?) Cualquier PROC. Los nombres y estructuras de los objetos de salida, por supuesto, variarán entre PROCs. Entonces, si está buscando un enfoque coherente, me centraría en usar ODS OUTPUT. Se agregó ODS en V7 (creo).

Sería interesante intentar encontrar un ejemplo de un conjunto de datos de salida que podría ser realizado por un PROC pero que no podría ser realizado por ODS OUTPUT. Espero que no haya ninguno. Si ese es el caso, podría considerar el rango de declaraciones / opciones OUTPUT dentro de PROCs como código heredado.