PROC SQL Phil Vecchione SQL • Structured Query Language • Developed by IBM in the early 1970’s • From the 70’s to the late 80’s there were different types of SQL, based on different databases. • In 1986 the first unified SQL standard (SQL-86) was created. • Today the SQL parser that is used by most databases are bases on SQL92 standards. Proc SQL • Added to the Base SAS package in version 6 • Implemented to allow people familiar with database to use SQL features within SAS • A “language within a language” Anatomy of A PROC SQL Statement proc SQL; select study, patient, age, race, gender from work.demographics where gender=‘M’ group by race; quit; But The SAS Data Step Already Does That…. • • • • • • • SAS SQL Create dataset • Create tables • Update values Update values • Delete Records Delete Records Append new records • Insert New Records • Create New Create New Variables variables • Sort Data Sort data • Join tables Merge datasets So what’s so cool about proc SQL? The Power Of SQL • SQL looks at datasets differently from SAS – SAS looks at a dataset one record at a time, using an implied loop that moves from the first record to the last – SQL looks at all the records, as a single object • Because of this difference SQL can easily do a few things that are more difficult to do in SAS Power of SQL: SQL Functions • There are a number of built in functions in SQL that can be used in a select statement • Because of how SQL handles a dataset, these functions work over the entire dataset • Functions: – – – – – Count: Counts Values Sum: Sums Values Max: Identifies the largest value Min: Identifies the smallest value Mean: Averages the values SQL Functions: Example 12 13 14 15 proc sql; select count(*) as Records from orcl.pat_survey1 quit; RECORDS -------19 Power of SQL: Group By • Similar to the BY parameter used in SAS • Groups the SQL observations by the variable defined • When used with the SQL functions allows summary information on groupings rather then the entire dataset Group By: Example 21 22 23 24 25 proc sql; select site_n, count(*) as Records from orcl.pat_survey1 group by site_n; quit; SITE_N RECORDS ---------------107 1 998 1 2310 2 2344 1 Loading Macro Variables • A great feature of Proc SQL is that you can load a value or values from a SQL statement into a macro variable • Can put a specific value into a macro variable for use throughout your program • Coupled with the SQL functions, you can load calculated values into a macro variable Loading Macro Variables: Example 43 44 45 46 47 48 50 proc sql; select mean(rhin_age) into: meanage from orcl.pat_survey1 where rhin_age is not null; quit; %put The mean age is: &meanage; AVG -----------33.35294 The mean age is: 33.35294 Power of SQL: Merging Between Two Values • A merge using a SAS data step requires that the variable described in the BY parameter have an EXACT match • SQL joins can contain NON-EXACT parameters for a join • Thus, allowing for joins to occur between values Merging Between Two Values: Example Drug Dosing Drug Concentrations Patient Visit Date Conc 1 4/14/2003 12 2 4/10/2003 3 3 4/4/2003 99 Patient Start Drug End Drug 1 4/13/2003 4/15/2003 1 4/19/2003 4/21/2003 2 3/22/2003 3/25/2003 2 4/9/2003 4/11/2003 3 3/1/2003 3/3/2003 3 5/9/2003 5/11/2003 Merging Between Two Values: Example Drug Dosing Drug Concentrations Patient Visit Date Conc 1 4/14/2003 12 2 4/10/2003 3 3 4/4/2003 99 proc sql; select c.patient, c.visit_date, c.conc,d.start_date, d.end_date from drug_conc c, drug_dosing d where c.patient=d.patient; quit; Patient Start Date End Date 1 4/13/2003 4/15/2003 1 4/19/2003 4/21/2003 2 3/22/2003 3/25/2003 2 4/9/2003 4/11/2003 3 3/1/2003 3/3/2003 3 5/9/2003 5/11/2003 Merging Between Two Values: Example Drug Concentrations Patient Visit Date Conc 1 4/14/2003 12 2 4/10/2003 3 3 4/4/2003 99 select c.patient, c.visit_date, c.conc,d.start_date, d.end_date from drug_conc c, drug_dosing d where c.patient=d.patient and (d.start_date le c.visit_date le d.end_date); Drug Dosing Patient Start Date End Date 1 4/13/2003 4/15/2003 1 4/19/2003 4/21/2003 2 3/22/2003 3/25/2003 2 4/9/2003 4/11/2003 3 3/1/2003 3/3/2003 3 5/9/2003 5/11/2003 References • Books – SAS Guide to the SQL Procedure – SQL for Dummies • Papers – SQL for People Who Don’t Think They Need SQL: Erin Christen (PharmaSUG 2003) Thank You Any Questions?
© Copyright 2024