100 Problemas de Estadistica Multivariante
100 Problemas de Estadistica Multivariante
100 Problemas de Estadistica Multivariante
Octubre-2016
UMVERSDAD DE LOS ANDES
M É ~ -AVENEZUELA
ACTA -VEREDICTO
Nosotros, Miembros del Jurado designado por el Ilustre Consejo de la Facultad de Ciencias
Económicas y Sociales en su Sesión No. 24/16 de fecha 01 de noviembre de 2016 para
conocer y decidir acerca de la Credencia1.de Mérito para el Ascenso clel Profesor L~YGEIL
ZAMBRANO, Céclula de Identidad No 5.027.705 a la Categoría de Profesor ASOCIADO
conforme al Artículo No 165 del Estatuto del Personal Docente y de Investigación de la
Universidad de Los Andes, reunidos en el Instituto de Estadística Aplicada y Coniputación
cle la Facultad de Ciencias Económicas y Sociales-Mérida, el clía seis de diciembre de dos
mil dieciséis, una vez revisado, discutido y realizada la correspondiente exposición pública
del trabajo titulado: "Computación Estadística con SAS" y por cuanto consideramos que
éste cumple con todos los requisitos exigidos para un Trabajo de Ascenso, acordamos
.-, impartir su ABROBACIQN para los fines a los cuales ha sido propuesto.
A los estudiantes que tuve durante las diversas ocasiones que dicté la
asignatura Computación Estadística tanto en la Licenciatura de Estadística
como en la Maestría de Estadística, gracias a ellos ésta guía fue creciendo hasta
ser lo que presento como Trabajo de Ascenso.
DEDICATORIA .................................................................................................................................................... I
AGRADECIMIENTOS .......................................................................................................................................... II
CONTENIDO .................................................................................................................................................... IV
Software Software
SAS/CONNECT SAS/EIS
Software Software
SAS/ENGLISH SAS/ETS
Software Software
SAS/FSP Software SAS/GIS
Base SAS
Software Software
SAS/GRAPH SAS/IML
Software Software
SAS/INSIGHT SAS/LAB
Otros productos
SAS
Por ser una aplicación bajo Windows contiene los mismos elementos de una ventana
windows:
Barra de título, donde se presenta el icono del SAS y al final los botones de
minimizar, maximizar y salir.
Barra de menú, conjunto de menús desplegables con las diferentes opciones del
sistema SAS (File, Edit, View, Tools, Run, Solutions, Windows y Help)
Barra de herramientas, barra con iconos gráficos con las opciones más usadas de
los menús (figura 4).
Barra de estado, situada en la parte mas inferior de la venta, muestra información
sobre la última acción realizada, de la librería actual y otros procesos. Si estamos
situados en el editor nos informa también la posición del cursor: línea y columna
(figura 5)
Área de trabajo, es la parte central de la ventana y está formada por diversas
ventanas de trabajo.
momento, así como también alguna de esas opciones tienen un atajo o combinación
de teclas rápidas que se muestra hacia el lado derecho de la misma.
Menu File: contiene las diferentes opciones para el manejo de archivo (figura 6), si
estamos sobre la ventana del editor (Edit) presenta las siguientes opciones:
New, abre archivo vacio para editar nuevo programa (atajo Ctrl+N)
Open, abre archivo existente (atajo Ctrl+O)
Close, cierra el archivo actual
Append, Agrega un archivo existente al final de la ventana del editor
Open Object, abre un objeto en el explorador
Save, guarda el archivo actual (atajo Ctrl+S)
Save as…, guarda el archivo actual con otro nombre o formato
Save as Object, guarda el archivo actual con otro nombre o tipo de objeto
Import Data…, importa datos ASCII para el editor
Export Data…, exporta los datos del editor a un archivo ASCII
Page Setup…, establece opciones de página
Print Setup…, establece opciones de impresión
Print Preview, muestra versión preliminar de la ventana actual
Print, imprime el contenido del editor o de la ventana actual (atajo Ctrl+P)
Send Mail…, envía el contenido de la ventana actual por correo electrónico
con el manejador de correo por defecto del Windows
Archivos usados recientemente, lista de los archivos abiertos recientemente
Exit, salir del sistema Sas
Si estamos situados en otra ventana (Log, Output o Graph), las opciones se adaptan
al contenido de la misma.
Menu Edit: contiene las opciones de edición del Sistema SAS (figura 7):
Menu View: contiene las opciones para visualizar las ventanas del área de trabajo
del Sistema SAS (figura 8):
Menú Tools: contiene las opciones para invocar un editor específico de algún objeto
del Sistema SAS (figura 9):
Menú Run: contiene las opciones para ejecutar el programa que está en la ventana
del editor de programa ya sea normal o avanzado ya sea local o remoto, si esta
seleccionada algunas instrucciones de la ventana sólo se ejecutan esas (figura 10):
Submit, ejecuta el programa escrito actualmente e la ventana Edit o las
instrucciones seleccionadas.
Recall Last Submit, recupera en la ventana Edit la sintaxis del último
programa ejecutado.
Submit Top Line, ejecuta solo la primera línea del programa que está en la
ventana Edit
Submit N lines…, ejecuta las primeras N líneas del programa que está en la
ventana Edit
Submit Clipboard, ejecuta el programa que está actualmente en el
portapapeles
Signon…, realiza una conexión hacia un servidor remoto (SAS Metadata
Server) mediante SAS/CONECT
Remote Submit…, hace que el programa que está en el editor se ejecute en
el servidor remoto SAS, con el cual previamente se ha establecido una
conexión.
Remote Get…, recupera las ventanas log y output creadas por una
ejecución remota asincrónica y las mezcla con las ventanas log y output
locales.
Remote Display…, muestra las ventanas log y output creadas por una
ejecución remota asincrónica
Signoff…, finaliza una conexión remota
Analysis, muestra una lista con todas los análisis que se pueden realiza en
SAS mediante menús
Development and Programming, para desarrollo y programación de
Aplicaciones
Reporting, para generar reportes
Accesories, accesorios gráficos, de edición, juegos y otros
Ventanas abiertas, lista las diferentes ventanas abiertas del área de trabajo,
pudiendo seleccionar alguna
Menú Help: contiene las opciones que proporcionan ayuda en el SAS (figura 13):
Para pasar de una ventana a otra se utiliza la barra de pestañas de ventanas (figura
20), situada en la parte inferior del área de trabajo y sobre la barra de estado; o
activándola directamente con el ratón cualquiera de ellas. Otra forma es
seleccionándola en la opciones Windows o View del menú principal.
Datos (Observaciones)
DATA EJEMPLO;
DATA step INPUT CI $ 1-10 SEXO 12 EDAD 14-15 ESC 17
UC 19-21 UA 23-25 TIEMPO 27-28;
CARDS;
(Paso de datos) .
.
.
PROC MEANS;
PROC step :
PROC SORT;
(Paso de procedimientos) :
PROC PLOT;
Reportes
PROC MEANS;
VAR EDAD UC UA TIEMPO;
TITLE "ESTADISTICAS BASICAS PARA LAS VARIABLES NUMERICAS";
PROC SORT;
BY CI;
PROC PRINT;
TITLE "DATOS DE LOS ALUMNOS ORDENADOS POR CEDULA";
RUN;
el estudio. Las variables se representan por medio de nombres SAS y pueden ser de
dos tipos:
Variables carácter o alfanuméricas, consisten de cadenas de caracteres, los cuales
pueden ser letras, dígitos y caracteres especiales. La longitud máxima de una
cadena de caracteres es de 200.
Variables numéricas, almacenan números que pueden estar precedido por un
signo mas (+) o menos (-), representan cantidades numéricas. Están almacenados
en formato de punto flotante en 8 bytes, lo que proporcionan espacio para 16 ó 17
dígitos.
A los datos tipo fechas, SAS las considera variables numéricas especiales.
Un valor de fecha SAS es interpretado como el número de días entre el 1 de enero
de 1960 y esa fecha.
-365 0 366
Almacenar la fecha de esta forma permite tener la fecha y la hora al mismo tiempo
en un mismo dato mediante fracciones de 1/24 para la hora, 1/1440 para los
minutos y 1/86400 para los segundos. También permite hacer operaciones con
fecha con una simple operación matemática.
La estructura rectangular de un conjunto de datos SAS implica que todas las
variables y todas las observaciones tienen que tener un valor. Sin embargo, muchas
veces existen valores ausentes. Por defecto, un valor ausente numérico se visualiza
como un punto y un alfanumérico se visualiza como un espacio en blanco
Una observación es un grupo de valores que representan los diferentes atributos o
características de un objeto o entidad en estudio, una persona, una región, un país,
un almacén, etc.
Un “data set” está constituido por dos áreas:
Área de descriptores, donde se almacena la documentación del conjunto de datos,
es decir, información descriptiva del conjunto de datos y sus variables. Los
atributos del conjunto de datos incluyen nombre, fecha y hora de creación,
etiqueta del conjunto de datos, número de observaciones, longitud del registro,
fecha de la última modificación. La descripción de las variables incluyen atributos
Las columnas en la tabla corresponden a las variables o campos de los datos y las
filas las observaciones o registros. El número máximo de variables que se puede crear
en un data set es 1024 mientras que en el número de observaciones no hay límite.
La estructura rectangular de un data set implica que toda variable debe tener valor o
existir para todas y cada una de las observaciones.
Descriptores
Obs 1
Obs 2
Obs 3
Matriz de datos Indices
Obs n
No se puede utilizar un editor de texto como el block de notas para ver o editar los
“dataset” SAS (archivos de datos SAS). La extensión o tipo de archivos para los
“dataset” SAS es: “.sas7bdat”.
Por defecto los “data set” se almacenan en la librería temporal “Word”, los cuales se
borran o se pierden en el momento de cerrar una sesión de trabajo con el SAS; por lo
general los almacenaremos en librerías permanentes, de esta forma los datos pueden
ser utilizados en futuras aplicaciones sin necesidad de volverlos a generar.
Seleccione la carpeta “Libraries” de la Ventana “Explorer”, la barra de herramientas
1.6.1 ENDSAS|BYE
Causa que la sesión SAS se termine al finalizar el actual paso de datos o de
procedimiento. Es el mismo efecto que seleccionar salir en el menú Archivo.
1.6.2 FILENAME
Asocia el nombre completo de un archivo externo (unidad:\camino\nombre) a un
nombre o ref-arch (referencia de archivo). La referencia de archivo es entonces usada
para referirnos o nombrar el archivo en las instrucciones de programación que
accesan archivos externos (INFILE, FILE).
Formato:
1.6.3 FOOTNOTE
Define las notas de pie de página que se imprimen en la parte inferior de las páginas.
Puede definir hasta 10 líneas de pies de página.
Formato:
FOOTNOTE[n] [„texto‟]
1.6.4 LIBNAME
Define uno o más directorios para ser usados por los programas SAS, asocia una ref-
lib (referencia de librería) con un nombre de directorio, el cual debe estar creado.
Formato:
La asociación entre ref-lib y el directorio se mantiene hasta que se cambie por otra
instrucción LIBNAME o hasta que finalice la sesión SAS.
Si se quiere leer o crear un data set permanente se crea una ref-lib y luego se nombra
el archivo.
Un nombre de archivo en SAS esta formado por dos nombres SAS separados por un
punto (.), el primero hace referencia a la librería y el segundo al nombre, así, si se
quiere crear el data set PRUEBA dentro del directorio DATOS de su disco duro se
hace:
LIBNAME C „C:\DATOS‟;
FILENAME F „C:\DATOS\ANALIS.DAT‟;
DATA C.PRUEBA;
INFILE F;
INPUT A X Z;
:
1.6.5 OPTIONS
Esta instrucción cambian temporalmente los valores por defecto de una o más
opciones del sistema SAS. Los cambios realizados por una instrucción OPTIONS
tienen efecto durante la duración de la sesión SAS o hasta que sean cambiados por
otra instrucción OPTIONS. Una instrucción OPTIONS puede estar en cualquier parte
de un programa SAS.
1.6.6 RUN
Esta instrucción causa que sean ejecutados los pasos de datos y procedimientos que
previamente habían sido leídos y compilados; luego de ejecutarlos pasa a leer o
entrar los siguientes para luego ejecutarlos.
1.6.7 TITLE
Es usado para especificar hasta diez líneas de título a ser impresas en cada página de
salida. Puede definir hasta 10 líneas de título.
Formato:
TITLE[n] [„texto‟]
1.6.8 X
La instrucción X invoca a una ventana de MS-DOS, para salir de ella tipee EXIT. Si lo
usa con un comando del MS-DOS ejecutará el mismo.
Formato:
X [comando]
[ 3 ][ 4 ] y [ 5 ]
En la figura 27 se muestra el proceso que realiza el SAS para crear los “dataset”,
mientras existan observaciones (CARDS o INFILE) lee una línea de datos, crea
nuevas variables y escribe la observación en el “dataset”.
Inicio
DATA
Hay más No
Observaciones
Si Completa el conjunto de
datos
Formato
INFILE <ref-archivo> <opciones>;
<ref-archivo> unidad:\camino\nombrearchivo.
<opciones> una de las siguientes:
FIRSTOBS = n indica cuál será la primera línea del archivo
externo a ser procesada, muy útil cuando el archivo
contiene los nombres de variables y descripción de
los datos en las primeras líneas.
OBS = n indica cuál será la última observación a ser
procesada en el archivo externo.
En el siguiente programa los datos se leen de un archivo externo llamado
datos_programa2.dat.
/* Este programa lee los datos que estaban después de CARDS utilizando
un archivo de datos externo mediante la instrucción INFILE .
Como el archivo contiene en la primera línea los nombres de variable
Lee desde la segunda línea de datos */
PROC PRINT;
TITLE "DATOS ORIGINALES DE LOS ALUMNOS";
PROC MEANS;
VAR EDAD UC UA TIEMPO;
TITLE "ESTADISTICAS BASICAS PARA LAS VARIABLES NUMERICAS";
PROC SORT;
BY CI;
PROC PRINT;
TITLE "DATOS DE LOS ALUMNOS ORDENADOS POR CEDULA";
RUN;
RUN;
Los datos pueden ser leídos en cualquier orden y se pueden omitir algunos de
ellos.
INPUT ESC 17 SEXO 12 EDAD 14-15 TIEMPO 27-28;
CARDS;
V009154650 2 28 2 159 72 12
V010456016 1 22 3 177 136 12
V011370884 2 22 1 86 64 8
Los valores numéricos pueden estar en cualquier parte del campo especificado por
las columnas de comienzo y fin. Puede llevar signo, punto decimal o exponente.
Los espacios en blanco no son permitidos en el medio de un campo numérico.
INPUT X 1-6; 1 2 3 4 5 6 7
2 3 23
2 3 23
2 3 23
2 3 . 0 23
- 2 3 -23
- 2 3 -23
2 3 0 NULO
- 2 3 NULO
DATA PRECIPI;
INFILE 'C:\DATOS\DATOS\GUARENAS.DAT';
INPUT ANNO 4. ENE 8.1 FEB 8.1 MAR 8.1 ABR 8.1 MAY 8.1 JUN 8.1
JUL 8.1 AGO 8.1 SEP 8.1 OCT 8.1 NOV 8.1 DIC 8.1;
PROC PRINT;
RUN;
INPUT ANNO 4. (ENE FEB MAR ABR MAY JUN JUL AGO SEP OCT NOV DIC)
(8.1 8.1 8.1 8.1 8.1 8.1 8.1 8.1 8.1 8.1 8.1);
INPUT ANNO 4. (MES1 MES2 MES3 MES4 MES5 MES6 MES7 MES8 MES9 MES10 MES11
MES12) (8.1);
DATA EJEMPLO;
INPUT CI $ 1-10 SEXO 12 ESC 15 / EDAD 4-5 TIEMPO 8-9 / UC 1-3 UA 6-8;
CARDS;
V009154650 2 2
28 12
159 72
:
DATA EJEMPLO;
INPUT CI $ 1-10 SEXO 12 ESC 15 #3 UC 1-3 UA 6-8;
CARDS;
V009154650 2 2
28 12
159 72
:
DATA VARIAS;
INPUT FECHA DDMMYY6. LLAMADA @@;
CARDS;
010198 1897 020198 2897 030198 987 040198 1452
050198 1113 060198 1807 070198 1071 040198 959
:
PROC PRINT;
RUN;
3. El paso de Procedimientos
[4]y[5]
La instrucción PROC se usa para invocar un procedimiento SAS. Los procedimientos
SAS son programas o módulos independientes que:
Leen data set
Calculan estadísticas
Realizan análisis estadístico
Imprimen resultados
Crean nuevos data set
3.1.1 Instrucción BY
Permite procesar por grupos, es decir, procesa por separado cada grupo que se forma
con los valores de las variables. Debe ser previamente ordenado el data set por las
variables de interés.
Formato:
BY <lista de variables>
Ejemplo: Calcula las estadísticas básicas para masculino y para femenino por
separado
Formato:
Ejemplo:
Formato:
TITLEn “título”
Ejemplo:
Formato:
VARIABLES <lista de variables>
o
VAR <lista de variable>
Ejemplo:
Formato:
PROC CHART opciones;
<instrucciones generales>
opciones
DATA = data set selecciona el data set del cual se
producirá el gráfico.
LPI = p especifica las proporciones del gráfico de torta
y estrella.
LPI = (líneas por pulgada / columnas por
pulgada)*10 por defecto es igual a 6.
FORMCHAR define los caracteres que usaran para la
construcción de los ejes vertical y horizontal,
la esquina inferior izquierda y los símbolos
usados para crear las barras, secciones o
bloques en el gráfico.
<Instrucciones generales>
BY <Variables>
VBAR <Variables>/opciones produce barras verticales
HVAR <Variables>/opciones produce barras horizontales
BLOCK <Variables>/opciones produce gráfico de bloques
PIE <Variables>/opciones produce gráfico de torta
STAR<Variables>/opciones produce gráfico de estrella.
Ejemplo:
Formato:
PROC CONTENTS opciones;
opciones
DATA = data set selecciona el data set del cual se
imprimirá el área de descriptores.
OUT = data set crea un nuevo data set como salida
PROC FORMAT;
VALUE FSEXO 1 = ‟M‟ 2 = ‟F‟;
VALUE FESC 1='ADM' 2='CON' 3='ECO' 4='EST';
VALUE FEDAD LOW-25 = 'MENOR O IGUAL A 25' 26-HIGH = 'MAYOR DE 25';
PICTURE FTIEMPO LOW-HIGH = '09 SEM';
PROC PRINT;
FORMAT SEXO FSEXO. EDAD FEDAD. TIEMPO FTIEMPO.;
opciones
DATA = data set selecciona el data set que se ordenará
opciones
DATA = data set selecciona el data set que contiene las
variables.
NOPRINT no imprime la salida
MAXDEC=n usa n cifras decimales para imprimir la salida.
Ejemplo
<opciones>
DATA = “data set” selecciona el data set del cual se obtendrá
el gráfico.
Opciones
VAXIS = valores coloca valores en el eje vertical
HAXIS = valores coloca valores en el eje horizontal
VREF = valores coloca líneas de referencias verticales
HREF = valores coloca líneas de referencias horizontales
OVERLAY superpone dos o más gráficos en uno
Ejemplo:
PROC PLOT DATA=C.EJEMPLO;
PLOT UC*UA;
PLOT UC*UA = "*";
PLOT UC*UA = "*" /HREF=50 100 150 200 VREF=100 200 300;
PLOT UC*UA = "*" /VAXIS = 0 TO 300 BY 50 HAXIS = 40 80 120 160;
opciones
DATA = data set selecciona el “data set” que se ordenará
OUT = data set crea un nuevo data set como salida (si no
se especifica se reemplaza el original o fuente)
instrucción general
BY [DESCENDING] var1 [DESCENDING] var2 ...;
Se ordena por los valores de var1, si hay registros u observaciones coincidentes éstos
se ordenan por los valores de var2. Por defecto se ordena en forma ascendente (de
menor a mayor), si se desea ordenar en forma descendente se debe especificar la
opción DESCENDING.
El procedimiento UNIVARIATE
Produce estadísticas descriptivas básicas para variables numéricas, con más detalles
que otros procedimientos que calculan estadísticas básicas.
Formato:
PROC UNIVARIATE opciones;
<instrucciones generales>
opciones
DATA = data set selecciona el data set que se ordenará
NOPRINT no imprime la salida.
PLOT produce un gráfico de tallo y hojas, de caja y un
probabilidad normal
Produce estadísticas básicas para las variables UC, UA, EDAD y TIEMPO; produce
gráfico de tallo y hojas y de normalidad; calcula el estadístico para la prueba de
hipótesis de que los datos siguen distribución Normal. Crea un data set con una
observación con las variables MEDIA, DESV, VARI, ASIM, KURTOSIS, MEDIANA Y
PERC95.
[3]y[5]
DROP = variables
Causa que las variables especificadas sean omitidas del data set. Funciona de idéntica
forma que la instrucción DROP del data set. En un paso de datos sólo se puede usar o
la opción DROP o la KEEP, pero no ambas. Ejemplo:
FIRSTOBS = n
Causa que el procesamiento comience en la enésima observación. Esta opción sólo es
válida cuando se está leyendo un data set ya existente.
Ejemplo:
KEEP = variables
Sólo las variables especificadas son retenidas, es decir, almacenadas en el data set. En
un paso de datos sólo se puede usar o la opción DROP o la KEEP, pero no ambas.
En el ejemplo anterior para indicar lo mismo se puede hacer:
LABEL = ‟etiqueta „
Especifica una etiqueta para el data set, la cual es almacenada en la parte de los
descriptores del data set y puede ser impresa con el procedimiento CONTENTS. La
etiqueta consiste de hasta 40 caracteres encerrados entre apóstrofes.
Ejemplo:
OBS = n
Especifica la última observación que será procesada. Al igual que FIRSTOBS
ésta opción es válida sólo para data set ya existente, es decir, con las instrucciones
SET, MERGE y UPDATE, o cuando se invoca para ser el leído desde un
procedimiento.
TYPE = DATA|CORR
Especifica el tipo de data set para la entrada. Si se especifica CORR los datos
representa una matriz de correlaciones que se usa como entrada para ciertos
procedimientos del modulo STAT.
DATA C.BENEF;
INPUT ANNO INGRESO GASTO;
GANANCIA=INGRESO-GASTO;
ANNO=ANNO+1900;
CARDS;
80 10922 7654
81 16099 10988
82 19999 13000
:
Una expresión es un conjunto de operadores y operandos mediante los cuales se
realizan las diferentes operaciones que se desean. Los operandos son las variables
y/o constantes sobre los cuales se aplican los operadores.
Un operador es un carácter especial (o combinación de caracteres) que representan
las operaciones.
Las expresiones se usan para crear nuevas variables, transformar las mismas, realizar
comparaciones (condiciones), calcular nuevos valores, etc.
Una constante es un número o una cadena de caracteres entre comillas o apóstrofes
que representan valores fijos, son llamadas también literales.
Los operadores pueden ser de tres tipos: aritméticos, de relación o lógicos. El tipo de
los operadores definen el tipo de expresión.
Una función SAS es una rutina que regresa un valor, la cual puede tener cero o más
argumentos o parámetros. Toda función SAS tiene un único identificador o nombre
SAS con el cual identificarla e invocarla. Para invocar una función colocamos su
nombre y la lista de argumentos entre paréntesis: nombreFunción(arg1, arg2, …)
Funciones aritméticas
ABS DIM MAX MIN MOD SIGN SQRT
Funciones de truncamiento
CEIL FLOOR INT ROUND TRUNC
Funciones matemáticas
EXP GAMMA LOG LOG2 LOG10 ARCOS ARSIN
ATAN COS COSH SIN SINH TAN TANH
Funciones de probabilidad
POISSON PROBBETA PROBCHI PROBF PROBNORM PROBT
Funciones de estadísticos muéstrales
CSS CV KURTOSIS MAX MIN MEAN N
NMISS RANGE SKEWNESS STD SUM USS VAR
Funciones de números aleatorios
NORMAL RANBIN RANCAU RANEXP RANGAM RANNOR RANPOI
RANTRI RANUNI UNIFORM
Funciones para manejo de caracteres
COMPBL COMPRESS DQUOTE INDEX INDEXC LEFT RIGHT
REVERSE REPEAT LENGTH LOWCASE UPERCASE SCAM TRIM
TRIMN SUBSTR BYTE RANK
Funciones de hora y fecha
DATE DATEJUL DATETIME DAY DHMS HMS HOUR
JULDATE MDY MINUTE MONTH SECOND TIME TODAY
WEEKDAY YEAR
Ejemplo:
DATA C.PRECIPI;
INFILE 'C:\DATOS\DATOS\GUARENAS.DAT';
INPUT ANNO 4. (MES1-MES12) (8.1);
MEDIA=MEAN(OF MES1-MES12);
:
Ejemplo:
ATTRIB X FORMAT=8.5 LABEL = ”Var. Independiente” Y FORMAT=8.5
LABEL = ”Var. Dependiente”
DATA EJEMPLO;
INPUT X Y Z;
IF X>Y THEN DELETE;
:
Para ejecutar más de una instrucción para una condición después de THEN o ELSE
coloque DO ….. END.
Ejemplo:
IF RESP=”S” THEN DO
N+1;
Y=SQRT(X);
END;
ELSE DO
N-1;
Z=Y+X;
END;
Ejemplo:
DATA EMPLEADO;
INPUT SSN 1-9 W2 12-18
IF W2=. THEN LIST;
:
Todas las variables en el vector de datos del programa son normalmente colocados a
valor faltante antes de la ejecución de un paso de datos.
Ejemplo:
DATA SUMAR;
RETAIN CONTAR TOTAL 0;
INPUT PUNTOS;
CONTAR+1;
TOTAL+PUNTOS;
CARDS;
10
5
.
6
4
Observe en el ejemplo anterior la instrucción CONTAR + 1, la cual es equivalente a
decir CONTAR=CONTAR + 1.
Repita para variable igual a algunos valores cualquiera (pueden ser numéricos o
carácter)
Formato:
DO variable=V1, V2, ...., Vn
instrucciones;
END;
Ejemplos:
DO Y=1 TO 10; /* Comienza en 1 hasta 1 */
DO MES=1,3,5,7,8,10,12;
Se deposita en una cuenta el primero de Enero una cantidad de 100000 Bs. Cuál es el
valor del capital al cabo de un año a una tasa de interés fija mensual del 2.5%?
DATA INVERSIO;
CAPITAL = 100000;
DO MES = 1 TO 12;
CAPITAL+(CAPITAL*0.025);
END;
¿Por qué el data set tiene una sola instrucción? ¿Cuál es el valor de la variable MES?
DATA INVERSIO;
CAPITAL = 80000;
DO WHILE (CAPITAL<500000);
MES+1;
CAPITAL+20000;
CAPITAL+(CAPITAL*0.025);
OUTPUT;
END;
INPUT ANNO 4. (ENE FEB MAR ABR MAY JUN JUL AGO SEP OCT NOV DIC)(8.1);
ARRAY A{12} ENE--DIC;
Si se omite los elementos el sistema SAS crea o referencia variables numeradas que
corresponde con el nombre del arreglo, en el ejemplo estas son LLUVIA1, LLUVIA2,
LLUVIA3, …, LLUVIA12.
La instrucción ARRAY debe usarse para definir (declarar) el arreglo antes que éste
sea referenciado. Si las variables (elementos) no han sido definidas las crea. No es
una instrucción ejecutable.
Para procesar un arreglo con subíndice explícito generalmente se utiliza el lazo de
repetición DO, aunque puede utilizarse también el DO WHILE y DO UNTIL. En
forma general se usa el siguiente formato:
El siguiente ejemplo lee el año y el nivel pluviométrico de los doce meses y calcula el
total por trimestre:
Obsérvese que en las declaraciones de los arreglos no se colocó los elementos y por lo
tanto el sistema los asumió como variables numeradas (MES1, MES2, …, MES12;
TRI1, TRI2, TRI3 y TRI4.
El ejemplo anterior puede realizarse declarando a MES como un arreglo de dos
dimensiones, tal y como se muestra a continuación:
:
INPUT ANNO 4. (MES1-MES12) (8.1);
ARRAY MES {4,3} MES1-MES12;
ARRAY TRI{4};
DO I=1 TO 4;
TRI{I}=0;
DO J=1 TO 3;
TRI{I}+MES{I,J};
END;
END;
DATA CONVER;
INPUT CODIGO $ ALT1 PE1 ALT2 PE2 ALT3 PE3 ALT4 PE4;
ARRAY ALTURA ALT1-ALT4;
ARRAY PESO PE1-PE4;
DO OVER ALTURA;
ALTURA=ALTURA*2.54;
PESO=PESO*0.454;
END;
CARDS;
A 65 166 67 175 55 110 69 178
B 66 133 67 161 75 200 72 180
C 72 182 63 115 50 105 67 190
;
Estos arreglos se pueden usar también con DO, DO UNTIL y DO WHILE pero se
debe tener cuidado en usar variable índice que se definió, o si se omitió se usa la
variable _I_. En el ejemplo anterior la instrucción DO OVER se puede sustituir por
DO _I_=1 TO 4.
Donde:
dataset El nombre o nombres de los conjunto de datos SAS
opciones Especifica las opciones de cada conjunto de datos
SAS a ser leído. Son las mismas opciones de un
conjunto de datos SAS vistas anteriormente.
opciones SET Especifica las opciones de la instrucción SET.
Estas son:
POINT = nombre crea una variable numérica cuyo
valor es el número de la observación en el
conjunto de datos de entrada que se quiere
procesar. Es como un apuntador a un
registro.
NOBS = nombre crea una variable cuyo valor es
el número total de observaciones en el
conjunto de datos de entrada.
END = nombre crea una variable que contiene
una indicación de fin de archivo. Esta
variable es inicializada en 0 y se coloca
en 1 cuando se lee la última observación
del conjunto de datos de entrada o a
concatenar.
Ejemplos:
DATA NUEVO;
SET VIEJO;
Hace una copia del conjunto de datos VIEJO con el nombre NUEVO.
DATA NUEVO;
DATA LLUTRI;
SET LLUVIA (KEEP=ANNO TRI1-TRI4);
ARRAY MES {4,3} MES1-MES12;
ARRAY TRI{4};
DO I=1 TO 4;
TRI{I}=0;
DO J=1 TO 3;
TRI{I}+MES{I,J};
END;
END;
Crea un conjunto de datos SAS formado por una variable de un conjunto de datos y
crea nuevas variables. Para calcular los totales trimestrales (LLUTRI) se usa los datos
de los meses (LLUVIA).
La instrucción SET se puede usar para concatenar archivos (conjuntos de datos). La
concatenación consiste en formar (crear) un conjunto de datos a partir de dos o más .
Cuando los conjunto de datos iniciales tienen las mismas variables el nuevo conjunto
de datos contendrá las observaciones del primer conjunto de datos listado y a
continuación las observaciones del segundo, etc., esta concatenación se llama unión
de archivos vertical.
DATA A95AL97;
SET A95 A96 A97;
Suponiendo que los conjunto de datos A95, A96 y A97 contiene las mismas variables
el nuevo conjunto de datos A95AL97 contendrá todas las observaciones de los tres
archivos.
Si los archivos originales en la instrucción SET contiene diferentes variables, las
observaciones obtenidas en el nuevo conjunto de datos tiene valores faltantes para
las variables que no son comunes, o que están definidas en un sólo conjunto de datos.
Los conjunto de datos listados en la instrucción SET puede contener las mismas
variables pero diferente atributo o formato. En este caso si se puede tomará el
formato o atributo del primer conjunto de datos listado:
DATA A;
NOMBRE=”MARY”;
DATA B;
NOMBRE=”SUSANA”;
DATA C;
SET A B;
Donde:
dataset Los nombres de dos o más conjunto de datos SAS
opciones Especifica las opciones de cada conjunto de datos
SAS a ser leído. Son las mismas opciones de un
conjunto de datos SAS vistas anteriormente.
END = nombre crea una variable que contiene una indicación de
fin de archivo. Esta variable es inicializada en 0
y se coloca en 1 cuando se lee la última
observación del conjunto de datos de entrada o a
cocatenar.
Ejemplos:
DATA PERSONA;
INPUT NOMBRE $ CIUDAD $;
CARDS;
ANA MERIDA
SUSANA BARINAS
NANCY CARACAS
;
DATA CARRO;
INPUT ANNO MARCA $;
CARDS;
1980 JEEP
1985 CHEVETE
1994 NEON
;
DATA MEZCLA;
MERGE PERSONA CARRO;
Esta mezcla se denomina uno a uno porque toma la primera observación de cada
conjunto de datos y crea la primera observación del Conjunto de datos resultado,
luego toma la segunda de cada conjunto de datos y así sucesivamente. En caso de
que alguno de los archivos tenga mas datos que el otro, el resultado tendrá el
número de observaciones del que tiene más, con valores faltantes en las variables del
que tiene menos, esto se puede controlar usando marcas de fin de datos como se
muestra:
DATA PERSONA;
INPUT NOMBRE $ CIUDAD $;
CARDS;
ANA MERIDA
SUSANA BARINAS
NANCY CARACAS
GENRY MERIDA
;
DATA CARRO;
INPUT ANNO MARCA $;
CARDS;
1980 JEEP
1985 CHEVETE
1994 NEON
;
DATA MEZCLA;
MERGE PERSONA CARRO END=FIN;;
IF (FIN) THEN DELETE;
Si se tiene dos o más conjunto de datos que tiene una o más variables en común la
mezcla se realiza utilizando la instrucción BY después de la instrucción MERGE. Las
variables nombradas en el BY deben ser del mismo tipo y con el mismo nombre en
cada uno de los conjuntos de datos SAS a unir. En la unión de archivos con una
variable en común, pueda ocurrir que existe en ambos archivos varias observaciones
en común y otras no, en cuyo caso las variables leídas de los conjuntos de datos son
inicializadas a faltantes cuando el valor de la variable BY no es común.
En caso de utilizar este tipo de mezcla hay que ordenar todos los archivos por las
variables BY.
DATA PERSONA;
INPUT NOMBRE $ CIUDAD $;
CARDS;
ANA MERIDA
SUSANA BARINAS
NANCY CARACAS
GENRY MERIDA
;
PROC SORT;
BY NOMBRE;
DATA CARRO;
INPUT NOMBRE $ MARCA $;
CARDS;
ANA JEEP
ANA CHEVETE
NANCY NEON
ANGEL FIAT
GENRY FORD
;
PROC SORT;
BY NOMBRE;
DATA MEZCLA;
MERGE PERSONA CARRO;
BY NOMBRE;
El resultado del ejemplo anterior se muestra a continuación, observe que hay tres
registros con observaciones faltantes ¿Por qué?.
5. Introducción al SAS/STAT
[6]
Los procedimientos estadísticos vistos hasta el momento corresponden al modulo
base del SAS y permiten realizar estadística descriptiva de datos. El SAS/STAT es
una herramienta de análisis estadístico que ofrece una amplia gama de capacidades
incluyendo análisis de varianza, de regresión, categórico, multivariante, de
sobrevivencia, cluster y no paramétrico. En primer lugar s presentará una lista
resumen de los procedimientos del SAS/STAT y después se estudiará en detalle
algunos de ellos.
<opciones>
DATA= nombre del conjunto de datos que contiene las
observaciones a analizar.
MANOVA hace que ANOVA use el modo multivariante de eliminación
de observaciones con valores faltantes. Esta opción es
útil en modo iterativo.
Los efectos principales se especifica con A B C, los efectos cruzados con A*B A*C B*C
A*B*C. Se puede especificar modelo factorial completo, es decir, efectos principales y
efectos cruzados, con la notación de barras:
MODEL Y = A|B|C;
Ejemplos:
Análisis de varianza en una vía con comparación de medias (análisis a posteriori).
PROC ANOVA;
CLASS X;
MODEL Y=X;
MEANS Y /DUNCAN TUKEY;
Análisis de varianza para probar si hay diferencias en la lluvia media de los cuatro
primeros meses.
DATA PRUEBA;
SET C.GUARENAS (KEEP=LLUVIA MES);
ARRAY MESES {4} MES1-MES4;
DO I=1 TO 4;
LLUVIA=MESES{I};
MES=I;
OUTPUT;
END;
PROC ANOVA DATA=PRUEBA;
CLASS MES;
MODEL LLUVIA=MES;
MEANS MES /DUNCAN;
DATA PRUEBA;
INPUT BLOQ TRAT $ DEVOL VALOR @@;
CARDS;
1 A 32.6 112 1 B 36.4 130 1 C 29.5 106
2 A 42.7 139 2 B 47.1 143 2 C 32.9 112
3 A 35.3 124 3 B 40.1 134 3 C 33.6 116
;
PROC ANOVA;
CLASS BLOQ TRAT;
MODEL DEVOL VALOR=BLOQ TRAT;
MEANS BLOQ TRAT / DUNCAN;
<opciones>
DATA= nombre del conjunto de datos que contiene las
observaciones a analizar.
MANOVA hace que GLM use el modo multivariante de eliminación
de observaciones con valores faltantes. Esta opción es
util en modo interactivo.
MULTIPASS hace que GLM relea los datos de entrada cuando sea
necesario.
NOPRINT suprime la salida normal de resultados
OUTSTAT= nombre de un conjunto de datos SAS que contendrá las
sumas de cuadrados, el estadístico F y los niveles de
probabilidad de cada efecto en el modelo.
<instrucciones GLM>
CLASS variables; declara las variables de clasificación que
identifican los grupos en el análisis. Debe preceder a
la instrucción MODEL y es obligatoria.
MODEL dependientes = independientes /opciones;
indica las variables dependientes y los efectos
independientes. La sintaxis de los efectos se indicará
más abajo. Si no se especifica efectos GLM estima
solamente el intercepto. Las opciones después de la /
son las siguientes:
INT hace que GLM imprima la prueba de hipótesis
asociada con el intercepto como un efecto en el
modelo.
NOINT hace que el parámetro intercepto no sea
incluido en el modelo.
NOUNI hace que GLM no imprima el análisis univariado
que son producido por defecto.
ALPHA= especifica el nivel para los intervalos de
confianza, sólo acepta 0.1, 0.01 y 0.05. Por
defecto toma 0.05.
P imprime los valores observados, predichos y
residuales para cada observación que no
contenga valores faltantes para las variables
independientes.
XPX imprime la matriz de productos cruzados X‟X
INVERSE imprime la matriz inversa o la inversa
generalizada X‟X.
ABSORB variables; absorbe los efectos de clasificación en el
modelo.
BY varaiables; procesa el análisis de varianza por grupos,
especificados en los niveles de las variables BY.
FERQ variable; especifica que la variable es de tipo
frecuencia.
ID variable; especifica variable para identificar las
observaciones en la salida.
WEIGHT variable; especifica una variable para ponderar las
observaciones.
MEANS efectos / opciones;
GLM puede calcular las medias de las variables
dependientes para algún efecto que aparezca en el lado
derecho del modelo. Las opciones después del / son
entre otras:
BON realiza la prueba t de Bonferoni de
diferencias entre medias para todos los
efectos principales dados en la instrucción
MEANS.
DUNCAN realiza la prueba de rangos múltiples de
Duncan sobre todos los efectos principales
dados en la instrucción MEANS.
GABRIEL realiza las comparaciones múltiples de Gabriel
sobre todos los efectos principales dados en
la instrucción MEANS.
SCHEFFE realiza las comparaciones múltiples de Scheffe
sobre todos los efectos principales dados en
la instrucción MEANS.
TUKEY realiza la prueba de rangos de Tukey sobre
todos los efectos principales dados en la
instrucción MEANS.
ALPHA= especifica el nivel de significancia para las
comparaciones sobre las medias, por defecto el
valor es de 0.05. Con la opción DUNCAN sólo
puede especificar 0.01, 0.05 y 0.1; puede
utilizar valores entre 0.0001 y 0.9999.
REPEATED nombrefactor niveles(valores) / opciones;
cuando los valores de las variables dependientes
representan medidas repetidas sobre las mismas unidades
experimentales, por ejemplo crecimiento de unas plantas
tomadas cada semana, esta instrucción permite probar la
hipótesis acerca de los factores medidos, así como
también las interacciones entre los individuos.
Ejemplo:
A continuación se muestra la instrucción MODEL de acuerdo a la clase de modelo
que se desea analizar, A, B, C representa variables CLASS y X, X1, X2, X3, Y, Y1, Y2 y
Y3 representan variables continuas.
<opciones>
DATA= nombre del dataset que contiene las observaciones a
usar. Este conjunto de datos puede ser de tipo DATA,
CORR, COV, ACE, FACTOR o SSCP.
OUT= crea un dataset que contiene todos los datos orignales
asi como también las puntuaciones de los componentes
principales.
OUTSTAT crea un dataset que contiene los siguientes
estadísticos medias, desviaciones estándar, número de
observaciones, correlaciones o covarianzas,
autovalores y.autovectores.
COV Calcula la matriz de covarianza para los componentes
principales
N= Número de componentes principales a ser calculados
NOINT Omite el intercepto para el modelo
PREFIX= Prefijo para nombrar los componentes principales
PARPREFIX= Prefijo para nombrar las variables residuales
SINGULAR= Especifica el criterio de singularidad
STD Estandariza las puntuaciones de los componentes
principales
VARDEF= Especifica el divisor usado en el cálculo de varianzas
y desviaciones estándar
NOPRINT Suprime mostrar todas las salidas
PLOTS= Especifica las opciones con los detalles de los
gráficos
<opciones>
CORR imprime la matriz de correlación para todas las
variables listadas en las instrucciones MODEL y VAR.
COVOUT muestra las matrices de covarianzas para los
parámetros estimados. Es válida sólo si esta la opción
OUTEST=.
DATA= nombre del conjunto de datos que contiene las
observaciones a usar. Este conjunto de datos puede
ser de tipo DATA, CORR o COV.
NOPRINT suprime la impresión de la salida.
OUTEST= hace que los parámetros estimados y los estadísticos
opcionales sean almacenados en este conjunto de datos.
SIMPLE imprime la suma, media, varianza, desviación estándar
y la suma de cuadrados no corregida para cada variable
usada en REG.
<Instrucciones>
MODEL dependientes = regresores /opciones;
especifica el modelo a usar en la regresión, antes
Formato:
PROC TTEST <opciones>;
<Instruciones del TTEST>;
<opciones>
DATA = Especifica el conjunto de datos SAS que contiene las
observaciones a comparar.
COCHRAN Especifica que se calcule la aproximación de Cochran y
Cox del nivel probabilidad del estadístico t para
varianzas desiguales.
MES=2;
OUTPUT;
PROC TTEST DATA=PRUEBA;
CLASS MES;
VAR LLUVIA;
MAQUINA
1 2 3 4 5
----------------------------------------------
11.95 12.18 12.16 12.25 12.10
12.00 12.11 12.15 12.30 12.04
12.25 12.08 12.10 12.02
12.10 12.02
DATA LLENADO;
INPUT MAQUINA $ LLENADO @@;
TIEMPO + 1;
OUTPUT;
CARDS;
A 11.95 A 12.00 A 12.25 A 12.10
B 12.18 B 12.11
C 12.16 C 12.15 C 12.08
D 12.25 D 12.30 D 12.10
E 12.10 E 12.04 E 12.02 E 12.02
/* GENERAR EL MODELO */
PROC GLM;
CLASS MAQUINA;
MODEL LLENADO = MAQUINA;
OUTPUT OUT=NU_DATA P=VAL_EST R=RESIDUO;
RUN;
/* ANALISIS DE RESIDUALES */
PROC PLOT VPERCENT =33;
PLOT RESIDUO*VAL_EST='þ';
PLOT RESIDUO*LLENADO;
PLOT RESIDUO*TIEMPO='þ';
RUN;
Ejemplo 2 (ejem2_stat.sas):
DATA EJEMPLO1;
DO I=1 TO 3;
DO TRAT=1 TO 6;
INPUT Y @;
OUTPUT;
END;
END;
CARDS;
0.95 0.33 -2.15 -1.20 1.80 -1.05
1.06 -1.46 1.70 0.62 0.88 -0.65
1.96 0.20 0.48 1.50 0.20 0.80
;
PROC PRINT;
RUN;
Ejemplo 3 (ejem3_stat.sas):
DATA BACTE;
INPUT SOLUCION $ @;
DO DIAS = 1 TO 4;
INPUT EFECTIVI @;
TIEMPO + 1;
OUTPUT;
END;
CARDS;
1 13 22 18 39
2 16 24 17 44
3 5 4 1 22
;
/* GENERAR EL MODELO */
PROC GLM;
CLASS SOLUCION DIAS;
MODEL EFECTIVI=SOLUCION DIAS;
MEANS SOLUCION / DUNCAN;
OUTPUT OUT=NU_DATA P=VAL_EST R=RESIDUO;
/* ANALISIS DE RESIDUALES */
PROC PLOT VPERCENT =50;
PLOT RESIDUO*VAL_EST='þ';
PLOT RESIDUO*EFECTIVI='þ';
PLOT RESIDUO*TIEMPO='þ';
RUN;
Ejemplo 4 (ejem4_stat):
DATA PROB1;
PROC PRINT;
PROC GLM ;
CLASS CARBON;
MODEL RESIS=CARBON / P ;
MEANS CARBON / TUKEY;
CONTRAST 'LINEAL' CARBON -1 0 1;
CONTRAST 'CUADRATICO' CARBON 1 -2 1;
OUTPUT OUT=NUEVO P=RESIS_ES R=RESIDUOS;
RUN;
Ejemplo 5 (Componentes principales, tomado del Ejemplo 58.2 del SAS/STAT 9.1
User´s Guide, pag 3619):
Tasas de crimen por cada 100.000 personas en siete categorías, por estados, para
Estados Unidos en el año 1977.
6. Introducción al SAS/GRAPH
6.1.2 Instrucción BY
Procesa los datos y ordena la salida de acuerdo a los valores de clasificación (igual
como funciona en el SAS Base y SAS/STAT).
Formato para los gráficos de barras horizontales y verticales con sus respectivas
opciones (para mayor información ver el Manual de Referencia del SAS/GRAPH):
Opciones
se refiere a una o más opciones de algún o todas de las siguientes categorías:
opciones de apariencia
ANNOTATE=dataset
CAUTOREF=color-línea-ref
CAXIS=color-eje
CFRAME= color-fondo
COUTLINE= color-borde-barras | SAME
CREF= color-linea-ref |( color-línea-ref)|lista color-
línea-ref
CTEXT=color-texto
FRAME | NOFRAME
IMAGESTYLE = TILE | FIT
LEGEND=LEGEND<1...99>
NOLEGEND
NOPLANE
PATTERNID=BY | GROUP | MIDPOINT | SUBGROUP
SHAPE=figura-barra-3D (solo HBAR3D y VBAR3D)
WIDTH=ancho-barra
WOUTLINE=ancho-borde
Opciones de estadísticos
CFREQ
CFREQLABEL=‟etiqueta-columna‟ | NONE (solo HBAR y HBAR3D)
CPERCENT
CPERCENTLABEL=‟etiqueta-columna‟ | NONE (solo HBAR y
HBAR3D)
ERRORBAR=BARS | BOTH | TOP
FREQ
FREQLABEL=‟etiqueta-columna‟ | NONE (solo HBAR y HBAR3D)
FREQ=variable-numérica
G100
INSIDE=estadístico
MEAN
MEANLABEL=‟etiqueta-columna‟ | NONE (solo HBAR y HBAR3D)
NOSTATS (solo HBAR y HBAR3D)
OUTSIDE= estadístico
PERCENT
PERCENTLABEL=‟etiqueta-columna‟ | NONE (solo HBAR y
HBAR3D)
PERCENTSUM
SUM
SUMLABEL=‟etiqueta-columna‟ | NONE (solo HBAR y HBAR3D))
SUMVAR=variable
TYPE= estadístico
Opciones de ejes
ASCENDING
AUTOREF
AXIS=AXIS<1...99>
DESCENDING
FRONTREF (solo HBAR3D y VBAR3D)
GAXIS=AXIS<1...99>
MAXIS=AXIS<1...99>
MINOR=número-menores
NOAXIS
NOBASEREF
NOZERO
RANGE
RAXIS=lista-valores | AXIS<1...99>
Ejemplo 1:
goptions device=png;
goptions noborder;
axis1 label=none;
quit;
Ejemplo 2:
/*Barras Horizontales Apareadas */
proc format; picture posval low-high='000,009'; run;
data midata;
input carrera $ 1-14 p_masc p_femen;
format promedio posval.;
grupo='Masculino'; promedio=-1*p_masc; output;
grupo='Femenino'; promedio= p_femen; output;
cards;
Administración 14.1 15.8
Contaduría 13.3 15.1
Economía 13.2 12.8
Estadística 13.8 13.2
;
run;
goptions device=png;
goptions noborder;
axis1 label=none;
axis2 label=none order=(-20 to 20 by 5) minor=none offset=(0,0)
value=(h=3pct);
quit;
Ejemplo 3:
/* Barras Horizontales 3D */
data midata;
input ITEM $ 1-9 AMOUNT;
cards;
Lunes 10.8
Martes 10.5
Miercoles 18.8
Jueves 14.8
Viernes 9.2
Sábado 11.3
Domingo 7.1
;
run;
goptions device=png;
goptions noborder;
axis1 label=none;
axis2 label=('Cantidad') order=(0 to 20 by 2) minor=(number=1)
offset=(0,0);
quit;
Ejemplo 4:
libname c "c:\datos";
filename arch_tex "c:\datos\guarenas.dat";
proc means;
output out=prom (keep=pmes1-pmes12) mean=pmes1-pmes12;
goptions device=png;
goptions noborder;
axis1 label=('Mes');
axis2 label=(a=90 'mm3') order=(0 to 150 by 20) minor=none offset=(0,0);
quit;
Ejemplo 5:
libname c "c:\datos";
filename arch_tex "c:\datos\hemoglobina.dat";
data c.hemoglobina;
infile arch_tex;
input escuela $ 8 caract $ 12 genero $ 16 n_hemog;
goptions device=png;
goptions noborder;
run;
Ejemplo 6:
axis1 label=('Escuela');
axis2 label=(a=90 'fi') order=(0 to 25 by 5) minor=(number=1) offset=(0,0);
subgroup=genero
maxis=axis1 raxis=axis2
autoref clipref cref=graycc
legend=legend1 coutline=black width=7.5;
run;
Para generar los gráficos de barras en 3 dimensiones cambie “hbar” por “hbar3d” y
“vbar” por “vbar3d”.
Formato para los gráficos de torta o sectores y de donas con sus respectivas opciones
(para mayor información ver el Manual de Referencia del SAS/GRAPH):
opciones de apariencia:
ANNOTATE=dataset
CFILL=color-relleno
COUTLINE= color-borde | SAME
DETAIL_RADIUS=porcentaje (PIE and DONUT only)
EXPLODE=lista-valores
FILL=SOLID | X
INVISIBLE= lista-valores
NOHEADING
RADIUS=
WOUTLINE=tamaño-borde
opciones de estadísticos
FREQ=variable-numerica
SUMVAR=variable-totalización
TYPE=estadístico
Ejemplo 7:
data c.hemoglobina;
infile arch_tex;
goptions device=png;
goptions noborder;
goptions gunit=pct htitle=6 ftitle="arial/bold" htext=4.25
ftext="arial/bold";
Formato para los diagramas de dispersión simple con sus respectivas opciones (para
mayor información ver el Manual de Referencia del SAS/GRAPH):
opciones de apariencia:
CAXIS=color-eje
CFRAME=color-fondo
COUTLINE=color-borde
CTEXT=color-texto
FRAME | NOFRAME
FRONTREF
IFRAME= ref-archivo-externo
IMAGESTYLE = TILE | FIT
NOAXIS | NOAXES
linea-ref
HAXIS=lista-valores | AXIS<1...99>
HMINOR=número-div-menores
HREF= lista-valores
HREVERSE
HZERO
LAUTOHREF=tipo-linea-ref
LHREF= tipo-linea-ref | (tipo-linea-ref) | lista-tipo-linea-
ref
data stocks;
input year high low @@;
cards;
1956 521.05 462.35 1957 520.77 419.79
1958 583.65 436.89 1959 679.36 574.46
1960 685.47 568.05 1961 734.91 610.25
1962 726.01 535.76 1963 767.21 646.79
1964 891.71 768.08 1965 969.26 840.59
1966 995.15 744.32 1967 943.08 786.41
1968 985.21 825.13 1969 968.85 769.93
1970 842.00 631.16 1971 950.82 797.97
1972 1036.27 889.15 1973 1051.70 788.31
1974 891.66 577.60 1975 881.81 632.04
1976 1014.79 858.71 1977 999.75 800.85
run;
quit;
symbol1 interpol=join
value=dot
color=red;
symbol2 interpol=join
value=C
font=marker
color=blue ;
legend1 label=none
position=(top center inside)
mode=share;
7. Introducción al SAS/IML
PROC IML;
instrucciones SAS/IML;
:
:
QUIT;
PROC IML;
Y en la ventana LOG aparecerá la siguiente respuesta indicando que IML está listo y
esperando instrucciones:
IML Ready
A
2
B
1 2 3 4
C
8
1
3
9
D
8 1 6 0
1 2 3 4
1 0 4 2
7 1 3 4
Valor faltante
A1=.;
A1
.
C1
Rancho
Casa
Apartamento
Quinta
C2
Pedro Luis Marcos
7.1 Expresiones
Como en todos los lenguajes de programación la manipulación de datos se realiza
mediante la asignación. La asignación es el proceso de evaluar una expresión y el
resultado de la misma guardarla almacenarla en memoria en forma de datos
(matrices en IML).
Las expresiones se forman como la combinación de uno o más operadores con uno o
más operandos. Existen tres de tipos de operadores, a saber:
Operadores prefijo, los cuales son colocados antes del operando, por ejemplo el
cambio de signo (-A).
Operadores infijo, los cuales son colocados en medio de dos operandos, por
ejemplo la suma (A+B).
Operadores postfijo, los cuales son colocados después del operando, por ejemplo
la traspuesta (A‟).
7.2 Función.
Para manipular y/o crear matrices existen en IML funciones.
Una función es un procedimiento o subrutina que regresa un único valor a través del
nombre de la misma. En IML las funciones se clasifican en 6 categorías: funciones que
dan información de las matrices, funciones escalares, funciones totalizadoras,
funciones de aritméticas de matrices, funciones que transforman matrices y funciones
de álgebra lineal y estadísticas.
Algunas usan escalares de parámetro, es decir, operan sobre cada elemento de la
matriz como la raíz cuadrada o el logaritmo; otros operan sobre la matriz completa
como es el caso de la inversa.
R=sqrt(B);
R
1 1.4142136 1.7320508 2
X=log(C);
X
2.0794415
0
1.0986123
2.1972246
Y=inv(D);
Y
0.0457516 -0.078431 -0.065359 0.1111111
0.2026144 0.5098039 -0.575163 -0.222222
0.0718954 0.0196078 0.1830065 -0.111111
-0.166667 0 0.1666667 0.1666667
el resultado es una matriz cuyo número de filas es igual al producto del número de
filas de ambas matrices y el número de columnas igual al producto del número de
columnas. Esta nueva matriz es de la siguiente forma:
C
1 1 1 2 2 2
1 1 1 2 2 2
3 3 3 4 4 4
3 3 3 4 4 4
I=3:8;
R=8:5;
LISTA=”var1”:”var5”;
I
3 4 5 6 7 8
R
8 7 6 5
LISTA
var1 var2 var3 var4 var5
A={1 1 1,7 6 5} ;
B={1 2 3,3 5 8} ;
E={5,10} ;
C=A#B ;
D=B#5 ;
F=A#E ;
C
1 2 3
21 30 40
D
5 5 5
35 30 25
F
5 5 5
70 60 50
* multiplicación de matrices
Formato :
matriz1*matriz2 halla la multiplicación de matrices, que
consiste en cada fila de una matriz por cada
columna de la otra, por lo que el número de
columnas de la primera debe ser igual al
número de filas de la segunda.
An* p * B p*m Cn*m produce : Ci , j ai ,k * bk , j
k 1, p
X={1 2 3, 4 5 6, 7 8 9} ;
Y=X[2,3] ;
Z=X[1:2,2:3] ;
esto produce :
X
1 2 3
4 5 6
7 8 9
Y
6
Z
2 3
5 6
produce:
B
1 3 5
2 4 6
realizar una reducción de filas o columnas de una matriz, producir una matriz de
dimensión reducida. Se utiliza en lugar de subíndices uno de los siguientes
operadores de reducción
+ suma
# multiplicación
<> máximo
>< mínimo
<:> índice del máximo
A={0 1 2, 5 4 3, 7 6 8};
B=A[+,];
C=A[:];
D=A[,##];
produce :
A B C D
0 1 2 12 11 13 4 5
5 4 3 50
7 6 8 149
Pedro 10 12 13 17 14
Juan 9 12 17 12 19
María 12 5 14 17 10
Luis 15 16 17 18 16
Alberto 10 10 11 12 13
También se puede realizar con la instrucción MATTRIB que permite asociar atributos
de impresión a las matrices. El formato general es :
donde nommatriz es el nombre de la matriz a imprimir, vecf y vecc son los vectores que
contienen las etiquetas de las filas y columnas, etiq es la etiqueta de la matriz y
formato es el formato de impresión de los elementos de la matriz.
Ejemplo :
produce :
Notas A-98 P1 P2 P3 T1 T2
Ejemplo :
if x<y then
do ;
z1=abs(x+y) ;
z2=abs(x-y) ;
end ;
else
do ;
z1=abs(x-y) ;
z2=abs(x+y) ;
end ;
Instrucciones de repetición
Estas se dividen en tres : DO DATA, Do iterativo, DO WHILE y DO UNTIL.
DO DATA especifica que la iteración se detiene cuando la condición de fin de
archivo ocurre, es decir, cuando finalicen los datos. Se puede usar DO DATA
para leer de un archivo externo o para procesar los datos de un conjunto de
datos SAS.
Formato :
DO DATA ;
:
:
end ;
DO iterativo
Formato :
DO variable = comienzo TO final [BY incremento] ;
Salto incondicional
Durante una ejecución normal las instrucciones son ejecutadas una después de la
otra. Existen instrucciones en IML que causan que salten inmediatamente a otra
instrucción. El lugar al cual la ejecución salta es identificada con una etiqueta, la
cual consiste de un nombre seguido por dos puntos colocada antes de la
instrucción. Estas instrucciones de salto son GOTO Y LINK.
Formato :
GOTO etiqueta ;
LINK etiqueta ;
Los argumentos son los datos que necesita el módulo y deben ser suministrados
cuando se llama o invoca el mismo. Estos deben ir separados por comas.
La cláusula GLOBAL causa que el modulo tome estos datos del programa o
módulo principal.
Hay dos formas de ejecutar un módulo :
RUN nombre[(argumentos)] ;
CALL nombre[(argumentos)] ;
Las funciones son módulos especiales que regresan un único dato a través del
nombre del mismo. Para crear un módulo tipo función debemos incluir entre las
instrucciones del mismo por lo menos una instrucción
RETURN (valor) ;
Para llamar o invocar una función se realiza mediante una expresión, por ejemplo :
start suma(x,y);
S=x+y ;
return (s);
finish ;
a={9 4} ;
b={1 8} ;
c=suma(a+b);
d=suma(suma(2,3),suma(5,6));
print c d;
C D
10 12 16
Los módulos creados pueden ser almacenados en un catalogo especial y luego ser
recargados a un programa, esto se realiza con las siguientes instrucciones :
SHOW storage ;
Fin de ejecución
La ejecución de un programa se puede realizar mediante las instrucciones PAUSE,
STOP y ABORT. Recordemos que con la instrucción QUIT también podemos parar
la ejecución de un programa, pero también causa que el IML se remueva de
memoria.
STOP ;
Para la ejecución y regresa al modo donde se pueden ingresar nuevas
instrucciones.
ABORT ;
Para la ejecución y se sale del IML, esta acción es parecida a la instrucción QUIT,
con la excepción que ABORT es ejecutable y programable.
El IML tiene algunas instrucciones que permiten pasar datos de un conjunto de datos
SAS a matrices y viceversa. Se pueden crear matrices de las variables y observaciones
de un conjunto de datos SAS ; se pueden crear vectores columna para cada variable
de un conjunto de datos SAS. Se pueden usar todas las observaciones o un
subconjunto de ellas. Se puede crear un conjunto de datos SAS con los elementos de
una matriz, en este caso las columnas corresponden a variables y las filas a
observaciones.
Para accesar un conjunto de datos SAS se debe primero abrir el mismo. En IML existe
tres formas de abrir un conjunto de datos :
X={1 2 3, 4 5 6, 7 8 9} ;
CREATE MISDATOS FROM X [COLNAME={X1 X2 X2}] ;
APPEND FROM X;
Se crea un conjunto de datos con tres variables (X1, X2 y X3) y tres observaciones.
Los datos que se usan en el IML pueden ser leídos desde archivos externos en forma
de texto o binarios, también pueden escribirse datos en archivos externos en forma de
texto. Para realizar esto se debe declarar los archivos externo con las instrucciones
INFILE o FILE y luego se accesan los datos (leer o escribir), usando las instrucciones
INPUT o PUT.
INFILE archivo [opciones] ;
Abre un archivo externo para entrada de datos.
archivo se refiere o al nombre de un archivo con
nombre y extensión encerrados entre apóstrofes
o a una referencia previa a un archivo
definida con la instrucción FILENAME.
Las opciones disponibles para ésta instrucción son :
LENGTH= especifica una variable, en la cual IML
almacenará la longitud del registro leído.
RECFM=N especifica que el archivo a ser leído como
binario puro.
FLOWOVER permite a la instrucción INPUT ir al próximo
registro para obtener valores para las
variables.
MISSOVER asigna valores faltantes a las variables
leídas después del fin del registro.
FILE archivo [recfm=N] [LRECL= ] ;
Abre un archivo externo para salida.
archivo se refiere o al nombre de un archivo con
nombre y extensión encerrados entre apóstrofes
o a una referencia previa a un archivo
definida con la instrucción FILENAME.
RECFM=N especifica que el archivo a ser leído como
binario puro.
LRECL= especifica la longitud del registro del
archivo de salida, por defecto la longitud el
registro es 512.
INPUT [variables] [formato] [directivas del registro]
[posición] …
Esta instrucción permite leer registros del actual archivo
de entrada definido con la instrucción INFILE, colocando
los valores dentro de variables IML.
variables especifica la variables o variables que se
leeran en la posición actual del registro.
Cada variable puede ser seguida de una
especificación de formato.
formato especifica el formato de entrada de una
variable, estas son las mismas que se usaron
en el paso de datos.
directivas especifica la forma de avanzar a un nuevo
registro (ver @ y / en el paso de datos).
posición para ir a una columna especificada en el
registro (ver @ y + en el paso de datos).
PUT dato [directiva del registro] [posición] [formato] …
dato especifica el valor a imprimir en la posición
actual del registro. Puede ser el nombre de
una variable (escalar), un valor literarl
(constante) o una expresión entre paréntesis.
formato especifica el formato de entrada de una
variable, estas son las mismas que se usaron
en el paso de datos.
directivas especifica la forma de avanzar a un nuevo
registro (ver @ y / en el paso de datos).
posición para ir a una columna especificada en el
registro (ver @ y + en el paso de datos).
CLOSEFILE archivos.
Es usado para cerrar los archivos abiertos por las
instrucciones INFILE y FILE.
SHOW FILES.
Muestra todos los archivos abiertos.
Ejemplos:
Imprime al archivo c:\datos\salida.dat los valores entre 1 y 10 con sus valores
respectivos de la raiz cuadrada, cuadrado y el logaritmo natural.
proc iml;
X=repeat(0,10,4);
Mattrib X format=10.5;
do i=1 to 10;
X[i,1]=i;
x[i,2]=sqrt(i);
x[i,3]=i**2;
x[i,4]=log(i);
end;
filename archivo 'c:\datos\salida.dat';
file archivo;
do i=1 to nrow(x);
put @1 (x[i,1]) +5 (x[i,2]) +5 (x[i,3]) +5 (x[i,4]);
end;
closefile archivo;
Crea un conjunto de datos SAS llamado clase con los datos que están en un archivo
externo denominado c:\datos\salida.dat.
options nocenter ;
proc iml;
use test;
read all ; /* Se leen los datos del dataset a y, x0, x1 y x2 */
x = x0 || x1 || x2;
print x;
b = INV(x`*x)*(x`*y);
yp = x * b ;
ye = y - yp ;
print "variables independientes";
print x;
print "variable dependiente";
print y;
print "estimación de parámetros";
print b;
print "predicción del valor de Y";
print yp ;
print "error en la predicción de Y";
print ye ;
create c var {parameter} ;
append from b;
quit;
proc print data = c;
run;
8.1 Macros
Una macro es un conjunto de <instrucciones y comandos sas> y de <instrucciones
macro>, que permite ejecutar una tarea o parte del programa varias veces, siendo
referenciadas desde cualquier parte del programa. Es mucho más que los módulos,
subprogramas o procedimientos en otros lenguajes de programación. Las macros
permiten sustituir texto en un programa y hacer muchas otras cosas.
Las <instrucciones macro> comienzan con los símbolos % y adicionalmente se usa el
símbolo & para definir variables macro y referenciar los parámetros dentro de la
macro.
Una macro se crea de la siguiente forma:
%MACRO <nombre-macro> [(par1, par2, …)];
<sentencia SAS> y/o <sentencia macro>
<sentencia SAS> y/o <sentencia macro>
:
:
%MEND <nombre-macro>;
La llamada a una macro se hace desde cualquier parte del programa pero después
que se haya declarado la misma de la siguiente forma:
Las macros al igual que los programas sas pueden contener comentarios, estos
pueden ser de dos formas:
Encerrados entre /* y */
Ejemplo: la siguiente macro ordena el dataset que viene en el parámetro “datos” por
la variable que viene en el parámetro “x” y luego calcula las estadísticas básicas para
los diversos valores de “x”.
Run;
%MEND est_bas;
Run;
Run;
8.2 Macro-variables
Una macro-variable es una variable que tiene validez o ámbito durante cualquier
paso de datos (DATA) o paso de procedimientos (PROC), es una herramienta que le
permite modificar dinámicamente un texto en un programa SAS a través de
sustitución simbólica. Se puede asignar grandes o pequeñas cantidades de texto a las
macro-variables y después ese texto se usa por una referencia simple de la variable
que lo contiene.
Las macro-variables pueden ser globales o locales, las globales tienen validez en todo
el programa desde su creación, y las locales son las que se crean dentro de una macro
y tienen validez solo durante la ejecución de la macro.
Las macro-variables se crean de la siguiente forma:
Una macro-variable lo que hace es sustituir el valor que tiene asignado en el lugar en
que se hace referencia a la misma como si fuera un literal.
A una macro-variable se le pude asignar varias instrucciones sas, lo cual se realiza
con la instrucción %str de la siguiente forma:
El valor que toma una macro-variable es de tipo carácter y la longitud puede ser
hasta 65534 caracteres entre letras, dígitos y caracteres especiales a excepción del % y
&. Si se omite el valor inicial la longitud será cero (vacio). Si una macro-variable ya
existe, el valor asignado reemplaza al valor anterior.
Para almacenar un valor a una macro-variable no es necesario colocar delimitadores,
por lo tanto, en forma directa solo se puede almacenar una cadena simple. Si se
colocan los delimitadores, estos formarían parte del valor de la macro-variable. En el
siguiente ejemplo los tres casos producen el mismo valor Gabriel, los espacios en
blanco no son almacenados.
%let nombre = Gabriel ;
%let nombre = Gabriel;
%let nombre = Gabriel ;
Si se desea una cadena con espacios y otros símbolos se usa la función %str y %nrstr,
ésta última permite que los caracteres % y & formen parte del valor de la macro-
variable.
Para usar un delimitador como parte del valor de una macro-variable se debe usar
anteponiendo el carácter %, como en la variable town del ejemplo anterior.
Si se asigna puros dígitos estos no son considerados como número sino caracteres. En
caso que se intente almacenar una expresión ésta no es evaluada. Utilice las funciones
%eval y %sysevalf para evaluar expresiones, la segunda para evaluar punto flotante.
%let num=123;
%let total=100+200; /* produce 100+200 */
%let total=%eval(100+200); /* produce 300 */
%let total=%sysevalf(100.2+200.125); /* produce 300.325 */
%let n1=123;
%let n2=202;
%let n3=&n1 + &n2 = %eval(&n1+&n2); /* Produce 123 + 202 = 325
*/
Si la sesión actual fue invocada el sábado 16 de julio del 2016, producirá la siguiente
instrucción:
Macro-variable
Contenido
del SAS
SYSCMD El último comando reconocido de la línea de comando o de la
ventana macro
SYSDEVICE Nombre del actual dispositivo gráfico
SYSDSN Nombre del dataset más reciente en dos campos
SYSLAST Nombre del dataset más reciente en un campo
SYSDATE La fecha de la sesión de SAS en formato de 2 dígitos para el año
SYSDATE9 La fecha de la sesión de SAS en formato de 4 dígitos para el año
SYSDAY El día de la semana de la sesión de SAS
SYSTIME La hora de la sesión de SAS
En la definición del repita o bucle %DO la macro-variable no lleva el símbolo &, pero
dentro del %DO … %END si se le antepone el ¯o-variable.
8.4.3 Si condicional
[%ELSE acción2;]
Cuando acción1 o acción2 se trata de mas de una sentencia se utiliza %DO y %END
para marcar el comienzo y fin del mismo.
%DO;
<sentencia SAS> y/o <sentencia macro>
<sentencia SAS> y/o <sentencia macro>
:
%END;
%GOTO <etiqueta>;
%<etiqueta>: sentencia;
%INPUT <macro-variale>;