Professional Documents
Culture Documents
SQL Sas Codes - VG
SQL Sas Codes - VG
SQL Sas Codes - VG
data march;
input flight $3. +5 date date7. +3 depart time5. +2 orig $3.
+3 dest $3. +7 miles +6 boarded +6 capacity;
format date date7. depart time5.;
informat date date7. depart time5.;
cards;
114 01MAR94 7:10 LGA LAX 2475 172 210
202 01MAR94 10:43 LGA ORD 740 151 210
219 01MAR94 9:31 LGA LON 3442 198 250
622 01MAR94 12:19 LGA FRA 3857 207 250
132 01MAR94 15:35 LGA YYZ 366 115 178
271 01MAR94 13:17 LGA PAR 3635 138 250
302 01MAR94 20:22 LGA WAS 229 105 180
114 02MAR94 7:10 LGA LAX 2475 119 210
202 02MAR94 10:43 LGA ORD 740 120 210
219 02MAR94 9:31 LGA LON 3442 147 250
622 02MAR94 12:19 LGA FRA 3857 176 250
132 02MAR94 15:35 LGA YYZ 366 106 178
302 02MAR94 20:22 LGA WAS 229 78 180
271 02MAR94 13:17 LGA PAR 3635 104 250
114 03MAR94 7:10 LGA LAX 2475 197 210
202 03MAR94 10:43 LGA ORD 740 118 210
219 03MAR94 9:31 LGA LON 3442 197 250
622 03MAR94 12:19 LGA FRA 3857 180 250
132 03MAR94 15:35 LGA YYZ 366 75 178
271 03MAR94 13:17 LGA PAR 3635 147 250
302 03MAR94 20:22 LGA WAS 229 123 180
114 04MAR94 7:10 LGA LAX 2475 178 210
202 04MAR94 10:43 LGA ORD 740 148 210
219 04MAR94 9:31 LGA LON 3442 232 250
622 04MAR94 12:19 LGA FRA 3857 137 250
132 04MAR94 15:35 LGA YYZ 366 117 178
271 04MAR94 13:17 LGA PAR 3635 146 250
302 04MAR94 20:22 LGA WAS 229 115 180
114 05MAR94 7:10 LGA LAX 2475 117 210
202 05MAR94 10:43 LGA ORD 740 104 210
219 05MAR94 9:31 LGA LON 3442 160 250
622 05MAR94 12:19 LGA FRA 3857 185 250
132 05MAR94 15:35 LGA YYZ 366 157 178
271 05MAR94 13:17 LGA PAR 3635 177 250
114 06MAR94 7:10 LGA LAX 2475 128 210
202 06MAR94 10:43 LGA ORD 740 115 210
219 06MAR94 9:31 LGA LON 3442 163 250
132 06MAR94 15:35 LGA YYZ 366 150 178
302 06MAR94 20:22 LGA WAS 229 66 180
114 07MAR94 7:10 LGA LAX 2475 160 210
202 07MAR94 10:43 LGA ORD 740 175 210
219 07MAR94 9:31 LGA LON 3442 241 250
622 07MAR94 12:19 LGA FRA 3857 210 250
132 07MAR94 15:35 LGA YYZ 366 164 178
271 07MAR94 13:17 LGA PAR 3635 155 250
302 07MAR94 20:22 LGA WAS 229 135 180
;
options ls=132 nofmterr nocenter nodate nonumber;
/*******************/
/* CUSTOMERS TABLE */
/*******************/
DATA CUSTOMERS;
INFILE CARDS MISSOVER;
INPUT @1 CUSTNUM 4. @7 CUSTNAME $25. @36 CUSTCITY $20.;
CARDS;
101 La Mesa Computer Land La Mesa
201 Vista Tech Center Vista
301 Coronado Internet Zone Coronado
401 La Jolla Computing La Jolla
501 Alpine Technical Center Alpine
601 Oceanside Computer Land Oceanside
701 San Diego Byte Store San Diego
801 Jamul Hardware & Software Jamul
901 Del Mar Tech Center Del Mar
1001 Lakeside Software Center Lakeside
1101 Bonsall Network Store Bonsall
1201 Rancho Santa Fe Tech Rancho Santa Fe
1301 Spring Valley Byte Center Spring Valley
1401 Poway Central Poway
1501 Valley Center Tech Center Valley Center
1601 Fairbanks Tech USA Fairbanks Ranch
1701 Blossom Valley Tech Blossom Valley
1801 Chula Vista Networks
;
RUN;
/********************/
/* CUSTOMERS2 TABLE */
/********************/
DATA CUSTOMERS2;
INFILE CARDS MISSOVER;
INPUT @1 CUSTNUM 2. @5 CUSTNAME $10. @17 CUSTCITY $20.;
CARDS;
1 Smith San Diego
7 Lafler Spring Valley
11 Jones Carmel
13 Thompson Miami
7 Loffler Spring Valley
1 Smithe San Diego
7 Laughler Spring Valley
7 Laffler Spring Valley
;
RUN;
/*******************/
/* INVENTORY TABLE */
/*******************/
DATA work.INVENTORY;
INFILE CARDS MISSOVER;
INPUT @1 PRODNUM 4. @8 INVENQTY 2. @13 ORDDATE MMDDYY10. @27
INVENCST COMMA10.2 @39 MANUNUM 3.;
FORMAT INVENCST DOLLAR10.2 ORDDATE MMDDYY10.;
CARDS;
1110 20 09/01/2000 45,000.00 111
1700 10 08/15/2000 28,000.00 170
5001 5 08/15/2000 1,000.00 500
5002 3 08/15/2000 900.00 500
5003 10 08/15/2000 2,000.00 500
5004 20 09/01/2000 1,400.00 500
5001 2 09/01/2000 1,200.00 600
;
RUN;
/*****************/
/* INVOICE TABLE */
/*****************/
DATA INVOICE;
INFILE CARDS MISSOVER;
INPUT @1 INVNUM 4. @7 MANUNUM 3. @13 CUSTNUM 4. @20 INVQTY 2. @25
INVPRICE COMMA10.2 @37 PRODNUM 4.;
FORMAT INVPRICE DOLLAR12.2;
CARDS;
1001 500 201 5 1,495.00 5001
1002 600 1301 2 1,598.00 6001
1003 210 101 7 245.00 2101
1004 111 501 3 9,600.00 1110
1005 500 801 2 798.00 5002
1006 500 901 4 396.00 6000
1007 500 401 7 23,100.00 1200
;
RUN;
/***********************/
/* MANUFACTURERS TABLE */
/***********************/
DATA MANUFACTURERS;
INFILE CARDS MISSOVER;
INPUT @1 MANUNUM 3. @6 MANUNAME $22. @29 MANUCITY $12. @41
MANUSTAT $2.;
CARDS;
111 Cupid Computer Houston TX
210 Global Comm Corp San Diego CA
600 World Internet Corp Miami FL
120 Storage Devices Inc San Mateo CA
500 KPL Enterprises San Diego CA
700 San Diego PC Planet San Diego CA
;
RUN;
/******************/
/* PRODUCTS TABLE */
/******************/
DATA PRODUCTS;
INFILE CARDS MISSOVER;
INPUT @1 PRODNUM 4. @7 PRODNAME $25. @33 MANUNUM 3. @38 PRODTYPE
$15. @53 PRODCOST COMMA10.2;
FORMAT PRODCOST DOLLAR9.2;
CARDS;
1110 Dream Machine 111 Workstation 3,200.00
1200 Business Machine 120 Workstation 3,300.00
1700 Travel Laptop 170 Laptop 3,400.00
2101 Analog Cell Phone 210 Phone 35.00
2102 Digital Cell Phone 210 Phone 175.00
2200 Office Phone 220 Phone 130.00
5001 Spreadsheet Software 500 Software 299.00
5002 Database Software 500 Software 399.00
5003 Wordprocessor Software 500 Software 299.00
5004 Graphics Software 500 Software 299.00
;
RUN;
/*******************/
/* PURCHASES TABLE */
/*******************/
DATA PURCHASES;
INFILE CARDS MISSOVER;
INPUT @1 CUSTNUM 2. @5 ITEM $10. @18 UNITS 2. @21 UNITCOST
COMMA12.2;
FORMAT UNITCOST DOLLAR12.2;
CARDS;
1 Chair 1 179.00
1 Pens 12 0.89
1 Paper 4 6.95
1 Stapler 1 8.95
7 Mouse Pad 1 11.79
7 Pens 24 1.59
13 Markers . 0.99
;
RUN;
/**********************************************************/
/* Chapter 2: Working with Data in PROC SQL */
/**********************************************************/
/**********************************************************/
/* Chapter 3: Formatting Output */
/**********************************************************/
/**********************************************************/
/* Chapter 4: Coding PROC SQL Logic */
/**********************************************************/
%VIEW(Products)
%COLUMNS(WORK,CUSTNUM);
%NOBS(WORK,PRODUCTS);
%DUPS(WORK,PRODUCTS,PRODTYPE);
/**********************************************************/
/* Chapter 5: Creating, Populating, and Deleting Tables */
/**********************************************************/
SELECT *
FROM CUSTOMERS
ORDER BY CUSTNUM;
QUIT;
SELECT *
FROM CUSTOMERS
ORDER BY CUSTNUM;
QUIT;
SELECT *
FROM PRODUCTS
ORDER BY PRODNUM;
QUIT;
PROC SQL;
DROP TABLE INVENTORY;
QUIT;
/**********************************************************/
/* Chapter 6: Modifying and Updating Tables and Indexes */
/**********************************************************/
/* < or > */
PROC SQL;
SELECT *
FROM PURCHASES (RENAME=(ITEM=ITEM_PURCHASED));
QUIT;
SELECT *
FROM PRODUCTS;
QUIT;
/**********************************************************/
/* Chapter 7: Coding Complex Queries */
/**********************************************************/
/* 7.7.3 Code Example: Passing More Than One Row with a Subquery */
PROC SQL;
SELECT *
FROM INVOICE
WHERE manunum IN
(SELECT manunum
FROM MANUFACTURERS
WHERE UPCASE(manucity) LIKE 'SAN DIEGO%');
QUIT;
INTERSECT
SELECT *
FROM PRODUCTS
WHERE prodtype = "Phone";
QUIT;
UNION
SELECT *
FROM PRODUCTS
WHERE prodtype = 'Workstation';
QUIT;
/* 7.8.3 Code Example: Concatenating Rows from Two Queries #1 */
PROC SQL;
SELECT prodnum, prodname, prodtype, prodcost
FROM PRODUCTS
OUTER UNION
EXCEPT
SELECT *
FROM CUSTOMERS_BACKUP;
QUIT;
/**********************************************************/
/* Chapter 8: Working with Views */
/**********************************************************/
/* 8.2.6 Code Example: Creating and Using Views in the SAS System */
/* NOTE: This code Intentionally Produces an Error! */
PROC SQL;
CREATE VIEW NO_CAN_DO_VIEW AS
SELECT *
FROM NO_CAN_DO_VIEW;
SELECT *
FROM NO_CAN_DO_VIEW;
QUIT;
/**********************************************************/
/* Chapter 9: Troubleshooting and Debugging Techniques */
/**********************************************************/
%DUPS(WORK,PRODUCTS,PRODTYPE);
/* 9.5.2.1 Code Example: FEEDBACK Option #4 */
%MACRO DUPS(LIB, TABLE, GROUPBY);
PROC SQL;
SELECT &GROUPBY, COUNT(*) AS Duplicate_Rows
FROM &LIB..&TABLE
GROUP BY &GROUPBY
HAVING COUNT(*) > 1;
QUIT;
%PUT LIB = &LIB TABLE = &TABLE GROUPBY = &GROUPBY;
%MEND DUPS;
%DUPS(WORK,PRODUCTS,PRODTYPE);
RESET NOFEEDBACK;
SELECT *
FROM PRODUCTS
WHERE PRODTYPE='Software';
QUIT;
SELECT *
FROM PRODUCTS
WHERE PRODTYPE='Software';
QUIT;
RESET UNDO_POLICY=NONE;
UPDATE PRODUCTS
SET PRODCOST = PRODCOST - (PRODCOST * 0.2)
WHERE UPCASE(PRODTYPE) = 'LAPTOP';
QUIT;
QUIT;
QUIT;
QUIT;
/**********************************************************/
/* Chapter 10: Tuning for Performance and Efficiency */
/**********************************************************/
UNION
SELECT *
FROM PRODUCTS
WHERE UPCASE(PRODTYPE) = 'SOFTWARE';
QUIT;
/* */
PROC SQL;
SELECT DISTINCT *
FROM PRODUCTS
WHERE UPCASE(PRODTYPE) IN ('SOFTWARE', 'LAPTOP');
QUIT;
/* 10.7.2 Code Example: Avoiding UNIONs #3 */
/* NOTE: Less Efficient Code */
PROC SQL;
SELECT *
FROM PRODUCTS
WHERE UPCASE(PRODTYPE) = 'LAPTOP'
UNION ALL
SELECT *
FROM PRODUCTS
WHERE UPCASE(PRODTYPE) = 'SOFTWARE';
QUIT;