Professional Documents
Culture Documents
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
Tabla SQL: equivale a SAS Data Tabla SQL SQL: se compone de filas Filas SQL: corresponden a en SAS DF Columnas SQL: corresponden a
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
Orden de especificacin de
SELECT FROM WHERE GROUP BY HAVING ORDER BY
clusulas
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
Clusula (Clause)
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
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 ;
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
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
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.
sas3\3_0-ProcSQL
PaisD
arroz maiz
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;
select Cont, Pob format=comma15. from sql.paises2 group by Cont Having i Cont in i ('Asia', ' i ' ' 'Europa') ' order by cont;
empnom A1 W1 C1
empan 28 10 12
empciud C1 C3 C6
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;
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;
proc sql outobs=12; title Temperaturas en Gr Celsius'; select City, (Prom-32)*5/9 format=4.1 from sql.worldtemps;
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 Location 2
67 23 67 90
Tropic ofCapricorn 23
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
proc sql;
char(4), SELECTclause char(1), FROMclause char(3) char(3), num, num informat=date7. format=date7., num informat=date7. format=date7.);
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;
Sexo F M M M F
CodTrab Salario TA1 ME3 ME1 42260 38090 29769 36514 FA3 .
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;
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;
Tabla Empleados
IdN IdNum
1876 1114 1556 1354 1130
A ll Apell
Chino Garces Peraza Pea
T l Tel
212/588-5634 212/588-1092 212/588 1092 718/383-5681 914/455-2337 212/587-0013
Ramirez Debora
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
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
Fila il 1 2 3 4
Estado d CT NY NY CT
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
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
2_CombinarSET_1.sas
Input Nombre $ Edad Sexo $ Sueldo; Input Nombre $ Edad Sexo $ Sueldo;
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
2_CombinarSET_2,sas:
Input Nombre $ Edad Sexo $ Sueldo; Input Nombre $ Edad Sexo $;
El DS contiene todas las variables: Nombre$ Edad Sexo$ Sueldo Se generan datos faltantes para las observaciones que no tienen informacin de alguna variable.
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
(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
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
terc
Arte
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;
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
data Ingreso(keep= vuelo ciudad ingreso); MERGE vuelo precios; p ; By destino; ingreso=pasajeros*precio; Run;
VUELO
PASAJERO DESTINO
CIUDAD
PRECIO
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.
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;
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
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