You are on page 1of 75

SAS

INTERMEDIO
Giampaolo Orlandoni M. Josefa Ramoni P. orlandoni@yahoo.com jramoni@ula.ve
Instituto st tuto de Estadstica stad st ca Aplicada p cada Universidad de Los Andes Mrida. Venezuela

GestindeDatos SQL Query Window

Structured Query Language (SQL)


SQL: lenguaje estandarizado que actualiza y selecciona datos de tablas relacionales y base de datos. Una relacin es un concepto matemtico similar al concepto de conjunto. Las relaciones se representan como tablas bidimensionales (filas, columnas) ) Proc SQL es la implementacin del Structured Query Language en el Base SAS. Permite realizar las as s siguientes gu e tes ta tareas: eas Generar reportes Generar estadsticas resmen Combinar C bi d t desde data d d tablas t bl Crear tablas Actualizar (update) valores en tablas SQL Modificar tablas SQL mediante incorporacin, modificacin o eliminacin de columnas.

Tabla SQL: equivale a SAS Data Tabla SQL SQL: se compone de filas Filas SQL: corresponden a en SAS DF Columnas SQL: corresponden a

File (SAS DF) y columnas col mnas observaciones variables.

Tabla de trminos equivalentes Procesamiento de Datos, SAS, SQL.


Procesamiento Datos File Record Field SAS SAS Data Observacin Variable Tabla Fila (Row) Columna(Column) SQL

QUERY SQL Query: solicitud de informacin a una tabla. El resultado del query puede ser un reporte o una tabla de datos. Ejemplo: j l seleccionar de (from) la tabla de empleados: apellido, departamento y salario para (where) empleados con salario mayor de 35.000. El query SQL es:
SELECT Apellido, Departamento, Salario FROM CLASS.EMPLEADOS

WHERE Salario GT 35000

SELECT: Herramienta principal del SQL. SQL Uso:


Identificar Recuperar (retrieve) Manipular

Columnas de tablas de Data SAS

Orden de especificacin de
SELECT FROM WHERE GROUP BY HAVING ORDER BY

clusulas

Clusulas obligatorias: SELECT y FROM.

Proc SQL: CLAUSULAS


Unin de dos tablas con PROC SQL Tabla 1: Transaccion N_Cta Trans Monto 56891 D 126.32 56891 C 560 57900 C 235 58876 88 6 D 1 14.56 6 59987 C 371.69
Clusula (Clause) SELECT FROM WHERE

Tabla2: N Cta N_Cta 56891 56900 58876 59900 59987

Agencia
Agen N S O N E

Output: cuentas con transacciones vlidas: filas con valores de NCta concordantes
N Cta N_Cta 56891 56891 58876 59987 Trans D C D C Agen N N O E Monto 126.32 560.00 14 56 14.56 371.69

Proc SQL: CLAUSULAS

Clusula (Clause)

SELECT FROM WHERE

Unin U de dos tab tablas as co con PROC OC SQ SQL PROC SQL; SELECT var-1, var 1 var var-2 2 FROM SAS_DS1

SAS_DS2

proc Sql; Select * From Transaccion, Agencia ; quit;

Una unin de tablas con SQL sin clusula WHERE resulta lt en un producto d t Cartesiano: C t i se generan todas las posibles combinaciones.

DataTransaccion; InputNCta $Trans $Monto; datalines; 56891 D 126.32 56891 C 560 57900 C 235 58876 D 14.56 59987 C 371.69 ; DataAgencia; InputNCta $Agencia$; datalines; 56891 N 56900 S 58876 O 59900 N 59987 E ;

proc sql ;

select Transaccion.NCta,Trans,Monto,Agencia from Transaccion,Agencia;

Proc SQL: CLAUSULAS


proc Sql; Select * From Transaccion, Agencia;

Fila 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

NCta 56891 56900 58876 59900 59987 56891 56900 58876 59900 59987 56891 56900 58876 59900 59987 56891 56900 58876 59900 59987 56891 56900 58876 59900 59987

Trans D D D D D C C C C C C C C C C D D D D D C C C C C

Monto Agen 126.32 126.32 126.32 126.32 126.32 560 560 560 560 560 235 235 235 235 235 14.56 14.56 14.56 14 56 14.56 14.56 371.69 371.69 371.69 371.69 371.69 N S O N E N S O N E N S O N E N S O N E N S O N E

Una unin de tablas con SQL sin clusula WHERE resulta en un producto Cartesiano: se producen todas d l las posibles ibl combinaciones.

18 19 20 21 22 23 24 25

DataIzq; InputCont $ExpI $PaisI $; datalines; NAtrigoCanada EURmaiz France EURarrozItaly AFRaceiteEgypt ; DataDer; InputContD $ExpD $PaisD $; datalines; NAazucar USA EURmaiz Spain EURfrutaBelgium ASIAarrozVietnam ; Proc sql; titleProducto Cartesiano';

sas3\3_0-ProcSQL_Paises
Cont ExpI PaisI
NA NA NA NA EUR EUR EUR EUR EUR EUR EUR EUR AFR AFR AFR AFR trigo trigo trigo trigo maiz maiz i maiz maiz arroz arroz arroz arroz

ContD ExpD PaisD


azucar USA maiz fruta arroz Spain Belgium Vietnam

Canada NA Canada EUR Canada EUR Canada ASIA France F France France France Italy Italy Italy Italy NA EUR EUR ASIA NA EUR EUR ASIA NA EUR EUR ASIA

azucar USA maiz i fruta arroz S i Spain Belgium Vietnam

azucar USA maiz fruta arroz Spain Belgium Vietnam

aceite Egypt aceite Egypt aceite Egypt aceite Egypt

azucar USA maiz fruta arroz Spain Belgium Vietnam

select * from Izq,Der;

Proc SQL: CLAUSULAS proc sql number;

sas3\3_0-ProcSQL

Select Transaccion.NCta, Trans, Monto, Agen From Transaccion, Agencia Where Transaccion.Ncta = Agencia.NCta;
Fila 1 2 3 4 NCta 56891 56891 58876 59987 Trans D C D C Monto 126.32 560 14.56 371.69 Agencia N N O E

La clusula WHERE implica la interseccin de valores: se seleccionan l i slo l las l cuentas que cumplen con las condiciones impuestas.

Proc SQL: CLAUSULAS proc sql number;

sas3\3_0-ProcSQL

Select Izq.Cont, paisI,paisD,ExpI,ExpD From Izq, De Where Izq.Cont = Der.Cont;

Fila Cont PaisI 1 2 3 4 5 NA

PaisD

ExpI p trigo maiz

ExpD p azucar maiz f t fruta

Canada USA Spain

EUR France EUR France F EUR Italy EUR Italy

B l i Belgium maiz i Spain

arroz maiz

Belgium arroz fruta

Proc SQL: libname sql C:\Datasas\sql';

sas3\3_1-ProcSQL_Poblacion

/*ORDENAMIENTODEDATOSENTABLAconSQL*/

datasql.paises2; inputcont $pob; datalines; ; proc sql; title 'Poblacion delosContinentes'; selectCont,Pob,sum(Pob)as TotPob format=comma15. from sql.paises2 where Pob gt 1000000 group by Cont order by Pob;

SELECT,FROM: Ej:SelectnameFromsql sql.paises; paises; SELECT:listalacolumnaName FROM:listalatabladonderesidelacolumnaName WHERE: Ej: SelectnameFromsql.paises Where populationGT1000000; S Segmenta t el l archivo hi basado b d en condiciones di i i impuestas t a los l datos. El ejemplo j p contiene una clusula WHERE q que restringe g el output del query a los pases con poblacin mayor que 1.000.000

ORDERBY
Select name From sql.paises Where population GT 1000000 Order By population Desc;

Ordenaeloutputdeunatablasegnunaomscolumnas. Default: D f lt orden d ascendente. d t E Enel lejemplo j l selistan li t los l d datos t en ordendescendentedelapoblacin. GROUPBY Select continente, Sum(population) From sql.paises Group By continente Order By continente; Divide los resultados del query en subconjuntos de filas. La funcin SUM lista la poblacin total de cada continente. Se agrupan los pases por continente y se ordenan alfabticamente

/*SQL: Varias selecciones a partir de archivo empleados y ordena las selecciones por diferentes criterios*/ data empleados; 3_1_ProcSQL_EmpleadoOrdenado.sas input empnum empnom $ empan empciud $ 20-34 empcargo $ 36-45 empsector; datalines; proc sql; /*Seleccin / Seleccin ordenada por nombre empleado select empnum, empnom, empsector, empan from empleados order by empnom ; /*Seleccin ordenada por aos empleado select empnum, empnom, empan, empsector f from empleados l d Where h empan ge 10 order d b by empan ; /*Seleccin ordenada por aos empleado select empnum, empnom, empan, empsector from empleados Where empan lt 10 order by empan ; quit;

HAVING: HAVINGoperaconlaclusulaGROUPBYpararestringirlos gruposbasadoencondicionesdadas. LascondicionesHAVINGseaplicanluegodeagruparlosdatos. Ejemplodequeryquerestringelosgruposparaincluirslolos continentesAsiayEuropa:

select Cont, Pob format=comma15. from sql.paises2 group by Cont Having i Cont in i ('Asia', ' i ' ' 'Europa') ' order by cont;

empnum 101 215 401

empnom A1 W1 C1

empan 28 10 12

empciud C1 C3 C6

empcargo empsector pres vend ger . 201 101

proc sql;3_1_ProcSQL_EmpleadoOrdenado2.sas /*Seleccinordenadaporaosempleado*/ select l t * from f empleados l d Where empan GE10 Having empsector LT210 Orderbyempnum; quit;

SeleccionarColumnasenTablas SeleccionarTodaslasColumnasenTablas UsarunasteriscoenSELECTparaseleccionartodaslas columnasenunatabla. LatablaSQL.CoorUsCiudadcontienevaloresdelatitudy longitudparalasciudadesU.S. lib libname sql l sql.CoorUsCiudad'; l C Ci d d' proc sql outobs=12; title Ciudades U.S.'; select * from sql CoorUsCiudad; sql.CoorUsCiudad;

Seleccionar Columnas Especficas enuna Tabla Seleccionar una columna: libname sql 'sql.CoorUsCiudad'; procsql outobs=12; title'Nombres deCiudades US'; selectCity fromsql.CoorUsCiudad'; Seleccionar ms deuna columna: libname sql 'sql.CoorUsCiudad'; procsql outobs=12; titleCiudades U.S.yEstados'; selectCity,Statefromsql.CoorUsCiudad;

EliminarFilasDuplicadas
libname sql sql.CoorUsCiudad; proc sql outobs=12; title 'Continentes de US'; select Continente from sql.unitedstates;

DISTINCT: eliminafilasduplicadas:
libname sql 'SAS-library'; proc sql; title 'Continentes de US'; select distinct Continente from sql.unitedstates;

DeterminarlaEstructuradeunaTabla UsarDESCRIBETABLE PROCSQLescribeladescripcinenlaventanaLOG.


libname sql sql sql.unitedstates'; unitedstates'; proc sql; describe table sql.unitedstates; sql unitedstates;

AgregandoTextoalOutput
libname sql sql.CoorUsCiudad'; proc sql outobs=12; title Codigo Postal'; select Codigo Postal de', de' Name Name, es' es', Code from sql.postalcodes;

Clculo nuevos Valores


libname sql sql.worldtemps;

proc sql outobs=12; title Temperaturas en Gr Celsius'; select City, (Prom-32)*5/9 format=4.1 from sql.worldtemps;

CASE:Asignacin deValores Condicionales


Ejemplo: j p

Laexpresin CASEdetermina elclima delazona basado enlos valores deLatitud delatabla SQL.CoorWORLDCITY table.

Zona Climtica
NorthFrigid NorthTemperate Torrid SouthTemperate SouthFrigid

L ti 1 Location
NorthPole ArcticCircle TropicofCancer Tropic ofCapricorn AntarcticCircle

Latitud L ti 2 Location Location 1


90 67 23 23 67 ArcticCircle Tropic ofCancer Antarctic Circle SouthPole

Latitud Location 2
67 23 67 90

Tropic ofCapricorn 23

Uso de Case Simple:


proc sql outobs=12;

sas3\3_4-ProcSqlClima.sas

title 'Climate Zones of World Cities'; select City, Country, Latitude, case when Latitude gt 67 then 'North Frigid' when 67 ge Latitude ge 23 then 'North Temper' when 23 gt Latitude gt -23 then 'Torrid' when -23 ge Latitude ge -67 then 'South Temper' else 'South 'So th Frigid' end as ClimateZone from sql.worldcitycoords sql worldcitycoords order by City;

UsodelaformaCASEOPERAND Esteejemploseleccionaestadosylosasignaaregionesbasadoen elvalordelacolumnaContinente procsqloutobs=12; title'Asignacin AsignacindeRegionesaContinentes Continentes'; ; select Name,Continente, caseContinente when'NorthAmerica'then'ContinentalU.S.' when'Oceania'then'PacificIslands' else'None' endasRegion f from sql.unitedstates; l d

Ej1_Proc SQL: Crea Tabla. Inserta valores sas3\4_ProcSQL_Ej_1-3.sas


libname procsql 'c:\datasas\temp';

Proc SQL CREATETABLEstatement INSERTstatement

proc sql;

create table procsql.pago


(IdNum Sexo CodTrab Salario FNac FContr

char(4), SELECTclause char(1), FROMclause char(3) char(3), num, num informat=date7. format=date7., num informat=date7. format=date7.);

insert into procsql.pago

values('1639','F','TA1',42260,'26JUN70'd,'28JAN91'd) values('1065' values( 1065 ,'M' M ,'ME3' ME3 ,38090, 38090 '26JAN54'd 26JAN54 d,'07JAN92'd) 07JAN92 d) values('1400','M','ME1',29769.'05NOV67'd,'16OCT90'd) values('1561','M',null,36514,'30NOV63'd,'07OCT87'd) values('1221','F','FA3',.,'22SEP63'd,'04OCT94'd); title 'PROCSQL.PAGO Tabla'; select * from procsql.pago;

Proc SQL: Tabla Generada

IdNum 1639 1065 1400 1561 1221

Sexo F M M M F

CodTrab Salario TA1 ME3 ME1 42260 38090 29769 36514 FA3 .

FNac 26JUN70 26JAN54

FContr 28JAN91 07JAN92

05NOV67 16OCT90 30NOV63 07OCT87 22SEP63 04OCT94

Ej2_Proc SQL: CALCULA VARIABLE SOBRE TABLA GENERADA

libname procsql 'c:\datasas\temp'; proc sql; create table procsql.bono as select IdNum, Salario format=dollar8., salario*.025 as Bono format=dollar8. from procsql.pago; procsql pago; title 'BONO'; select * from procsql.bono;

Ej3_Proc SQL : ACTUALIZACION DE DATOS

data Empleados; input IdNum $4. $4 +2 Apell $8. $8 Nombre $8 $8. CodTrab $3. $3 +1 Salario 5. +1 Tel $12.; datalines; 1876 Chino Juan TA1 42400 212/588-5634 1114 Garces Julia ME3 38000 212/588-1092 1556 Peraza Miguel ME1 29860 718/383-5681 1354 Pea Mary FA3 65800 914/455-2337 1130 Ramirez Debora PT2 36514 212/587 212/587-0013 0013 ; proc print data=empleados;run; /*SQL para crear l la T Tabla bl d de Empleados*/ E l d */

proc sql; title 'Tabla Tabla Empleados Empleados'; ; select * from Empleados;

Ej3_Proc SQL : ACTUALIZACION DE DATOS


/*SQL para actualizar la Tabla de Empleados*/ update empleados set salario=salario* case when codtrab like '__1 1' then 1.04 else 1.025 end; alter table empleados modify salario num format=dollar8. drop p tel; ; title 'Tabla Empleados Actualizada'; select * from empleados;

Tabla Empleados

IdN IdNum
1876 1114 1556 1354 1130

A ll Apell
Chino Garces Peraza Pea

N b Nombre C dT b Salario CodTrab S l i


Juan Julia Miguel Mary TA1 ME3 ME1 FA3 PT2 42400 38000 29860 65800 36514

T l Tel
212/588-5634 212/588-1092 212/588 1092 718/383-5681 914/455-2337 212/587-0013

Ramirez Debora

Tabla Empleados Actualizada

IdNum
1876 1114 1556 1354 1130

Apell
Chino Garces Peraza Pea Ramirez

Nombre
Juan Julia Miguel Mary Debora

CodTrab
TA1 ME3 ME1 FA3 PT2

Salario
$44 096 $44,096 $38,950 $31,054 $67,445 $37,427

Ej4_Proc SQL : UNION DE TABLAS sas\4_ProcSQL_Ej_4-5.sas


SQL para Unir DOS TABLAS libname proSQL 'c:\datasas\temp'; proc sql number; title 'Informacion algunos Empleados'; create table procsql.EmpNom as select IDNum, CodTrab, Apellido, Nombre, Ciudad, Estado, , Salario from procSQL.Empleados, procSQL.Nomina where id=idnum AND idnum in ('1919', '1400', '1350', '1333');

Obs IdNum 1 2 3 4 5 6 7 8 9 10 1919 1653 1400 1350 1401 1499 1101 1333 1402 1479

Sexo M F M F M M M M M F

CodTrab TA2 ME2 ME1 FA3 TA3 ME3 SCP PT2 TA2 TA3

Salario 34376 35108 29769 32886 38822 43025 18723 88606 32615 38785

FNac

FCnt

Obs
1 2 3 4 5 6 7 8 9 10

Id

Apellido

Nombre
GERALD MARIA ABDULLAH

Ciudad

Estado

Tel
203/781203/675212/586718/383201/732201/812212/586 212/586203/781718/384718/384-

12SEP60 04JUN87 15OCT64 09AUG90 05NOV67 16OCT90 31AUG65 29JUL90 13DEC50 17NOV85 26APR54 07JUN80 06JUN62 01OCT90 30MAR61 10FEB81 17JAN63 02DEC90 22DEC68 05OCT89

1919 ADAMS 1653 ALIBRAND 1400 ALHERTAN 1350 ALVAREZ 1401 ALVAREZ

STAMFORD CT BRIDGEPO NEWYORK CT NY NY

MERCEDES NEWYORK CARLOS

PATERSON NJ PRINCETO NEWYORK NJ NY

1499 BAREFOOT JOSEPH 1101 BAUCOM WALTER

1333 BANADYGA JUSTIN 1402 BLALOCK 1479 BALLETTI RALPH MARIE

STAMFORD CT NEWYORK NEWYORK NY NY

Fila il 1 2 3 4

IdNum d 1919 1400 1350 1333

CodTrab d b TA2 ME1 FA3 PT2

Apellido llid ADAMS ALHERTAN ALVAREZ BANADYGA

Nombre b GERALD ABDULLAH MERCEDES JUSTIN

Ciudad i d d STAMFORD NEWYORK NEWYORK STAMFORD

Estado d CT NY NY CT

Salario l i 34376 29769 32886 88606

Ej5_Proc SQL:

CONCATENACION DE TABLAS

Concatenar Tablas Elminando Datos Faltantes libname proSQL 'c:\datasas\temp'; proc sql; create table procSQL.NomTot as select * from procsql.pago1 procsql pago1 union select * from procsql.nomina1; delete from procsql.NomTot reset double; title 'NOMINA AMPLIADA'; select * from procsql.NomTot;
Elimina Filas con Valores Missing

where codtrab is missing or salario is missing;

Ej6_Proc SQL: GENERACION DE VIEWS sas3\4_ProcSQL_6-7.sas


Generacin de Views: Resmenes Estadsticos libname proSQL 'c:\datasas\temp';
proc sql; create view procSQL.TRABAJO as select codTRAB, count(codTrab) as number label='Numero',
int(((today()-FNac)/365)) as edad label='Edad', avg(int((today()-FNac))/365) as medad format=2. label='EdMed, avg(salario) as msal format=comma8. label='Salario Medio'

from nomina1 group by codtrab having medad ge 30; title 'Informacin para cada Categoria '; title2 'Edad Media Mayor o Igual a 30'; select * from procsql.Trabajo;

Macro CODEBOOK

sas3\4_ProcSQL_7-8_Macros.sas

Informacin tipo sobre variables seleccionadas de un archivo especificado. ifi d R Resume l las caractersticas t ti principales i i l d de variables seleccionadas de cierto archivo de datos %macro codebook(var); proc sql; title "Codebook de &var"; select count(&var) label="Total Obs", count(distinct t(di ti t &var) & ) l label="Unique b l "U i V Values", l " nmiss(&var) label="Coded Missing", min(&var) label="Min", max(&var) ( ) label="Max", , mean(&var) label="Mean", std(&var) label ="Std. Dev." from procSql.pobre; quit; title " "; ; %mend;
/*USO DE LA MACRO CODEBOOK */

options i l b l formdlim=' label f dli ' '; ' %codebook(rend2) %codebook(edu3) %codebook(escuela) %codebook(almuerzo)

EJERCICIO. Usar PROC SQL para generar un reporte con toda la informacin de personal programado para volar a RDU. Usar las tablas siguientes

proc sql; select EmpID, Nombre, Apellido, CodTrab, FltID, SchDate From vuelos, empleados where EmpID=ID

Vuelos
FltID SchDate EmpID IA0360003JAN2000E00075 IA0360003JAN2000E00434 IA0360003JAN2000E00481 IA0240016JAN2000E00082 IA0200320JAN2000E00082 IA0200320JAN2000E00485 IA0200523JAN2000E00481 IA0240207FEB2000E00364 EmpID E00434 E00481 E00481 E00377 E00207 E00432 E00052 E00247 E00120 E00248 Nombre KATE BETTY BETTY DONALD ANNE SANDRA JOHN CARRIE PEGGY DAWN

Empleados
Nombre DOROTHY KEVIN DESIREE ALEC NORMA GREGORY HANS JOHN ANNE Apellido MILLS COCKERHAM GOLDENBERG FISHER WIELENGA GOODYEAR ECKHAUSEN MELTON WHITE ID E00001 E00024 E00031 E00033 E00043 E00046 E00047 E00052 E00055 CodTrab FLTAT3 FLTAT3 PILOT3 FLTAT2 PILOT3 FLTAT1 FLTAT3 FLTAT2 PILOT3

Apellido Coddigo FltID SchDate SMITH PILOT2 IA03600 03JAN2000 YANG FLTAT2 IA03600 03JAN2000 YANG FLTAT2 IA02005 23JAN2000 SZCZEPANSKI PILOT1 IA02000 16FEB2000 YANG FLTAT2 IA02405 17FEB2000 SCHOBER FLTAT2 IA02405 17FEB2000 MELTON FLTAT2 IA03400 03APR2000 DODGE PILOT2 IA03400 03APR2000 DUNLAP FLTAT2 IA02000 05APR2000 EDWARDS FLTAT3 IA02000 05APR2000

SQL vs DATA STEPS. Creacin de Tablas


Query que muestra la poblacin de todos los pases grandes (poblacin >1 milln)en ) cada continente. proc sql; title 'Poblacin grandes pases'; select Cont, sum(Pob) as TotPob format=comma15. from sql.countries where Pob gt 1000000 group by Continente order by TotPob; Programa g SAS que q genera g el mismo resultado; proc summary data=sql.paises2; where Pob > 1000000; class Cont; var Pob; output out=sumPob sum=TotPob; run; proc sort data=SumPob; by totPob; run; proc print data=SumPob noobs; var Cont C t TotPob; T tP b format f t TotPob T tP b comma15.; 15 where _type_=1; run;

SQL vs DATA STEPS. Creacin de Tablas

SQL vs DATA STEPS. Creacin de Tablas

1-CONCATENACION Data Sets


1-Concatenacin de DS. Igual Nmero de Variables
Usar SET en el Data Step Nmero total de Observaciones en el Data Set Final (DSF) es igual a la suma de observaciones en los DS que se combinan Nmero de Variables en el DSF: Igual al nmero de diferentes variables en los DS que se combinan. Ejemplo:

2_CombinarSET_1.sas
Input Nombre $ Edad Sexo $ Sueldo; Input Nombre $ Edad Sexo $ Sueldo;

1. Data Dep1; 2. Data Dep2; 3. Data Dep1_2;

Set Dep1 Dep2;


Title 'Dep1 y Dep2;

Proc Print data=Dep1_2;

CONCATENACION Data Sets. IGUAL Nmero de Variables


1-Data Dep1
Obs 1 2 3 4 5 6 7 8 Nombre Vincente Felipe Tomas Nicolas Gisela Humberto Emily Michaela Edad 34 28 27 36 32 39 22 32 Sexo M M M M F M F F Sueldo 1000 2000 1800 3000 3500 1900 2600 2500

3-Data Dep1_2
Obs 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Nombre Vincente Felipe Tomas Nicolas Gisela Humberto Emily Michaela Martin Maria Odilia Tomas Luis Benito Francisc Edad 34 28 27 36 32 39 22 32 40 45 28 33 38 29 41 Sexo M M M M F M F F M F F M M M M Sueldo 1000 2000 1800 3000 3500 1900 2600 2500 3500 4500 2975 2750 3390 2800 3500

2-Data Dep2
Obs 1 2 3 4 5 6 7 Nombre Martin Maria Odilia Tomas Luis Benito Francisc Edad 40 45 28 33 38 29 41 Sexo M F F M M M M Sueldo 3500 4500 2975 2750 3390 2800 3500

Data Dep1_2; Set Dep1 Dep2; run;

data Combined; Set Data1 Data2; run;

CONCATENACION Data Sets


2-Diferente Nmero de Variables:
Nmero total de Observaciones en el Data Set Final (DSF) es igual a la suma de observaciones en los DS que se combinan Nmero de Variables en el DSF: Igual al nmero de diferentes variables en los DS que se combinan. Ejemplo:

2_CombinarSET_2,sas:
Input Nombre $ Edad Sexo $ Sueldo; Input Nombre $ Edad Sexo $;

1. Data Dep1; 2. Data Dep2; 3. Data Dep1_2;

Set Dep1 Dep2;

El DS contiene todas las variables: Nombre$ Edad Sexo$ Sueldo Se generan datos faltantes para las observaciones que no tienen informacin de alguna variable.

CONCATENACION Data Sets. DISTINTO NUMERO DE VARIABLES


1-Data Dep1
Ob Obs 1 2 3 4 5 6 7 8 Nombre b Vincente Felipe Tomas Nicolas Gisela Humberto Emily Michaela Edad d d 34 28 27 36 32 39 22 32 S Sexo M M M M F M F F S ld Sueldo 1000 2000 1800 3000 3500 1900 2600 2500

3-Data Dep1_2
Obs 1 2 3 4 5 6 7 8

Nombre
Vincente Felipe Tomas Nicolas Gisela Humberto Emily Michaela Martin Maria Odilia Tomas Luis Benito Francisco

Edad
34 28 27 36 32 39 22 32 40 45 28 33 38 29 41

Sexo
M M M M F M F F M F F M M M M

Sueldo
1000 2000 1800 3000 3500 1900 2600 2500 . . . . . . .

2-Data Dep2
Obs 1 2 3 4 5 6 7 Nombre Martin Maria Odilia Tomas Luis Benito Francisc Edad 40 45 28 33 38 29 41 Sexo M F F M M M M

9 10 11 12 13 14 15

Data Dep1_2; Set Dep1 Dep2; run;

2-INTERCALADO (INTERLEAVE) Data Sets


Los DS deben estar ordenados por la misma variable especificada en el BY que acompaa al comando SET procsortdata=Work.Dep1out=WORK.TABLA1; by SEXO;run; procsortdata=Work.Dep2out=WORK.TABLA2; by SEXO;run; dataCOMBINA; length NOMBRE$10EDAD8SEXO$8SUELDO8; setWORK.TABLA1WORK.TABLA2; by SEXO; keep NOMBREEDADSEXOSUELDO;run;

2-INTERCALADO (INTERLEAVE) Data Sets

data Combined; Set Data1 Data2; By Year;

2-INTERCALADO (INTERLEAVE) Data Sets

2-INTERCALADO (INTERLEAVE) Data Sets

2-INTERCALADO (INTERLEAVE) Data Sets

3-MERGE Data Sets


Combina observaciones de dos o ms DS en una sola observacin b i y en un nuevo DS. DS El nuevo DS contiene todas las variables de los DS originales

1-Merge One-to-one: 2MergeOne.sas


No se usa el BY. Observaciones se combinan segn su posicin en el DS input. El nmero de observaciones en el nuevo DS es igual al n_maximo =max(n1,n2) Ejemplo: 1. 2 2. 3. DataClase; DataHorario; DataCronograma; InputNombre$125An$2630Espec $3350; InputFechadate9. date9 @12Hora$@19Sala$; Merge ClaseHorario;

MERGE One-to-One. 2MergeOne.sas


Ejemplo: asignacin de horarios de sala de conferencias a estudiantes Nombre: nombre estudiante. An: ao estudio: 1, 2, 3, 4 Especialidad: area de especializacin faltante para 1 y 2 aos).

(valor

Programa: El siguiente programa ejecuta un Merge One-toOne O e de los os DS, S, as asignando g a do u un horario o a o a cada estud estudiante a te de la clase en el orden de los datos
data Clase; Input Name $ 1-25 Year $ 26-34 Spec $ 36-50; data Horario; Input Date date9. date9 @12 Time $ @19 Room $; data cronograma; merge clase horario;

Merge One-to-One
Clase
Obs 1 2 3 4 5 6 Nombre Azuaje, Juan Carter, Tomas Perez, Elisa Tamayo, Raquel Uzon, Rolando Wiky, Mauricio An prim terc cuar prim segn terc Arte 3 4 Arte Matematica 1 2 Azuaje, Juan Carter, Tomas Perez, Elisa Tamayo, Raquel Uzon, Rolando Wiky, Mauricio prim terc cuar prim Arte 14SEP2010 10:00 103 14SEP2010 10:30 103 Espec

Cronograma = Clase + Horario


Obs Nombre An Espec Fecha Hora Sala

Matematica 14SEP2010 11:00 207 15SEP2010 10:00 105

Horario
Obs 1 2 3 4 5 6 Fecha 14SEP2010 14SEP2010 14SEP2010 15SEP2010 15SEP2010 17SEP2010 Hora 10 00 10:00 10:30 11:00 10:00 10:30 11:00 Sala 103 103 207 105 105 207

segn

15SEP2010 10:30 105

terc

Arte

17SEP2010 11:00 207

data Combined; Merge Data1 Data2;

2-Merge Match: 2MergeMatch.sas


Se usa BY p para combinar observaciones p provenientes de los DS input data, basados en en valores comunes de la variable por la que se unen (merge) los DS.
MERGE SAS-data-set-list; BY variable-list;

Ejemplo: 1-Data Dep1; Sueldo; 2-Data Dep2; Input Nombre $ 1-10 Edad Sexo $

proc sort data=Dep1 out=WORK.Tabla1; proc sort data=Dep2 out=WORK.Tabla2; 3-Data Dep1_2_Merge1;

by SEXO; by SEXO;

Input Nombre $ 1-10 Edad Sexo $ Sueldo;

Merge WORK.Tabla1 WORK.Tabla2; By Sexo;

2-Merge Match: 2MergeMatch.sas

data Combined; Merge Data1 Data2; By Year;

MERGE Match Data Sets


Una compaa mantiene dos Sas DS: COMPANY y FINANZA.
Data Set Variable

Nombre COMPANY Edad Sexo Nombre FINANZA Id d Sueldo

1-Data Company; p y; Input Nom $ 1-25 Edad 27-28 Sexo $ 30; proc sort data=company; by Nom; 2-Data Finanza; Input IdNum $ 1-11 Nom $ 13-40 Sueldo; proc sort data=finanza; by Nom; 3-Data CompaFina; Merge company finanza; by Nom; run;

Combinacin de archivos
VUELO
VUELO
921 982 114 431

PRECIOS
DESTINO
DFW DFW LAX LAX

PASAJERO
169 120 185 103

DESTINO
DFW FRA LAX LON

CIUDAD

PRECIO
600 1200 900 900

Dallas Frankfurt Los Angeles London

data Ingreso(keep= vuelo ciudad ingreso); MERGE vuelo precios; p ; By destino; ingreso=pasajeros*precio; Run;

VUELO

PASAJERO DESTINO

CIUDAD

PRECIO

4-UPDATING Data Sets


Updating trabaja con dos DS: Master DS: conjunto original de datos Transaction DS: contiene la informacin nueva que va a reemplazar la informacin antigua contenida en el Master. Reemplaza valores de variables del MasterDS con valores no faltantes del TransactionDS. Foma general: Update MasterDS

TransactionDS;

BY Variable identificadora; Update slo puede manejar dos DS El comando BY indica las variables match Ambos DS deben estar ordenados por las mismas variables match especificadas en BY.

data Master; UPDATE Master Transaction; By Year;

UPDATING
DATA MASTER; INPUT CUENTA BALANCE; datalines; 3152617 1203.35 3355912 342.13 3999249 9823.45 4102477 200.34 4999999 100 DATA TRANSACT; INPUT CUENTA TIPO $ MONTO; datalines; 3355912 DEBITO 23.12 4102477 CREDITO 110 4102477 DEBITO 1.23 4999999 ELIMINAR . 5023541 CREDITO 100

DATA MASTER2;

Obs CUENTA 1 2 3 4 5 3152617 3355912 3999249 4102477 5023541

BALANCE 1203.35 319.01 9823 45 9823.45 309.11 100.00

RUN;

UPDATE MASTER TRANSACT; BY CUENTA; IF TIPO='CREDITO' THEN BALANCE+MONTO; ELSE IF TIPO='DEBITO' TIPO= DEBITO THEN BALANCE+-MONTO; BALANCE+ MONTO; ELSE IF TIPO='ELIMINAR' THEN DO; PUT 'ELIMINADA ' CUENTA= BALANCE=; DELETE; END; KEEP CUENTA BALANCE;

USO de la Variable IN
Uso de la opcin IN= DataSet: Permite determinar el DS del cual proviene el valor que se examina Sintaxis: Si t i SET DS1 (IN=variable) DS2; BY variable_comn; variable comn; Ejemplo: el siguiente programa crea dos DS: SOUTHAMERICAN y EUROPEAN. Cada DS contiene las siguientes variables: Cada DS contiene las siguientes variables: Year: year that South American and European countries competed in the World Cup Finals from 1954 to 1998. Country: name of the competing country. Score: final score of the game. Result: result of the game. Value for winners: Won ; value for losers: Lost g

3_11Variable IN.sas

AMPLIAR INFORMACION MANUALES Y AYUDA SAS


Concatenating data sets: Concatenating SAS Data Sets. Interleaving data sets: Interleaving SAS Data Sets. Manipulating data sets You can manipulate data sets as you combine them. For example, you can select certain observations from each data set and determine which data set an observation came from: Conditionally Processing Observations from Multiple SAS Data Sets. MERGE, MODIFY, and UPDATE statements: Statements section of SAS Language Reference: Dictionary, and the Reading, Combining, and Modifying SAS Data Sets section of SAS Language Reference: Concepts. Merging data sets: Merging SAS Data Sets. Modifying data sets: Modifying SAS Data Sets, and Conditionally Processing Observations from Multiple SAS Data Sets. Updating data sets: Updating SAS Data Sets.

UNION SQL2
data Trabajo; input autor$18 seccion$916 titulo$1743 @45 tiempo time5. duracion; format tiempo time5.; label title='Titulo Trabajo'; datalines; Tomas Testing Automated Product Testing 9:00 35 g g data seccion; input seccion$ p 18 sala$ g guia$; ; datalines; Graphics Sable Denise data plenaria; input lider$18 tema$930; label tema='Plenaria label tema Plenaria Tema Tema'; ; datalines; Mary External DBMSs

proc sql; /* Autor y Lider en plenaria */ title2 'Autor title2 Autor_Lider Lider'; ; select autor, titulo, tema from Trabajo, Plenaria where autor = lider; autor = lider; /* Trabajo y Tema Plenaria a ser discutidos */ title2 'Trabajo title2 Trabajo y Tema Plenaria y Tema Plenaria'; ; select autor, titulo, tema from trabajo full join plenaria on autor = lider; t lid /*Trabajos, Temas Plenaria y Autor que presenta*/ /*C bi en una columna /*Combina l los l valores l autor t y lider lid */ title2 "Trabajo_Plenaria a discutir y Autor que presenta"; select coalesce(autor, lider) as person, titulo, tema f from trabajo full join b f ll plenaria l on autor = lider;

/*Trabajos Siguientes que se presentan luego de finalizar el Trabajo Actualmente Presentado /*Ejemplo de unir una Tabla con otra instancia de ella misma, segn un rango d condiciones de d /*Alias definidos para las dos instancias del trabajo /* p (Presentado); n (siguiente)

title2 'Proximos Trabajos'; select p.autor label='Presentado', n.autor label='Siguiente', n.titulo, n.seccion, n.tiempo g p from trabajo p, trabajo n where n.tiempo between p.tiempo + p.duracion*60 and p.tiempo + (30 + p.duracion)*60 order by p.autor;
/*Determinar que persona est muy ocupada: lidera, presenta, gua Esto es un Join con ms de dos tablas (tres en este caso) Se usa la opcin DISTINCT para eliminar duplicados. */

title2 'Muy Ocupados'; select distinct autor from trabajo, seccion, plenaria where autor=guia and autor=lider;

/*Lista de Tpicos de Trabajos, Discusiones Plenarias, y Personas Responsables de las plenarias. Uso de la funcion COALESCE() */

proc sql; title2 'Lista Tpicos Trabajos'; select coalesce(autor,guia,lider) as Persona, titulo label='Presenta Trabajo', seccion.seccion label='Seccin', t tema label='Plenaria' l b l 'Pl i ' from trabajo full join seccion on autor=guia j plenaria on coalesce(autor, guia)=lider p ( ,g ) full join order by 1;

Statement/ Procedure

Action Performed
Controls the operation of a SET, MERGE, UPDATE, or MODIFY statement in the DATA step and sets up special grouping variables. BY-group processing is a means of processing observations that have the same values of one or more variables. Reads observations from two or more SAS DS and joins them into a single observation. When using MERGE with BY, the data must be sorted or indexed on the BY variable. Processes observations in a SAS data set Sorted or indexed data are not required for use with BY, but are recommended for performance in place place. (Contrast with UPDATE.) Reads observations from one or more SAS data sets. Applies transactions to observations in a master SAS data set. UPDATE does not update observations in place; it produces an updated copy of the current data set. Both the master and transaction DS must be sorted by y or indexed on the BY variable. Adds observations from one SAS DS to the end of another SAS DS

BY

MERGE

MODIFY

SET

UPDATE

PROC APPEND

You might also like