data chktrans (keep=soc_sec_number
check_account_number trantype date amount);
length trantype $ 6;
format date date9. amount dollar12.2;
set vlib.chkcrd(in=crd) vlib.chkdeb(in=dbt);
where check_balance>0;
if crd then do;
trantype='Credit';
date=check_credit_date;
amount=check_credit_amount;
end;
else if dbt then do;
trantype='Debit';
date=check_debit_date;
amount=check_debit_amount;
end
run;
proc sort;
by soc_sec_number check_account_number;
run;
options nodate linesize=80;
proc print data=chktrans;
by soc_sec_number;
var check_account_number trantype date amount;
title2 'Checking Account Transactions by SSN';
run;
Checking Account Transactions by SSN
---------------------- SOC_SEC_NUMBER=156-45-5672 --------------------
CHECK_ACCOUNT_
OBS NUMBER TRANTYPE DATE AMOUNT
1 345620123456 Credit 01APR1991 $100.00
2 345620123456 Debit 28MAR1991 $13.29
3 345620123456 Debit 31MAR1991 $32.87
4 345620123456 Debit 02APR1991 $50.00
5 345620123456 Debit 31MAR1991 $13.42
---------------------- SOC_SEC_NUMBER=178-42-6534 --------------------
CHECK_ACCOUNT_
OBS NUMBER TRANTYPE DATE AMOUNT
6 745920057114 Credit 12JUN1991 $1,300.00
7 745920057114 Debit 10JUN1991 $25.89
---------------------- SOC_SEC_NUMBER=234-74-4612 --------------------
CHECK_ACCOUNT_
OBS NUMBER TRANTYPE DATE AMOUNT
8 345620113263 Credit 31MAR1991 $672.32
9 345620113263 Debit . .
---------------------- SOC_SEC_NUMBER=434-62-1224 --------------------
CHECK_ACCOUNT_
OBS NUMBER TRANTYPE DATE AMOUNT
10 345620134564 Credit 22MAR1991 $1,342.42
11 345620134564 Debit 18MAR1991 $432.87
12 345620134564 Debit 18MAR1991 $19.23
13 345620134564 Debit 22MAR1991 $723.23
14 345620134564 Debit 22MAR1991 $82.32
15 345620134564 Debit 26MAR1991 $73.62
16 345620134564 Debit 26MAR1991 $31.23
17 345620134564 Debit 29MAR1990 $162.87
18 345620134564 Debit 29MAR1991 $7.12
19 345620134564 Debit 31MAR1991 $62.34
20 345620134663 Credit 28MAR1991 $120.00
21 345620134663 Debit 28MAR1991 $25.00
---------------------- SOC_SEC_NUMBER=434-62-1234 --------------------
CHECK_ACCOUNT_
OBS NUMBER TRANTYPE DATE AMOUNT
22 345620104732 Credit 02APR1991 $400.00
23 345620104732 Debit . .
---------------------- SOC_SEC_NUMBER=436-42-6394 --------------------
CHECK_ACCOUNT_
OBS NUMBER TRANTYPE DATE AMOUNT
24 345620135872 Credit 02APR1991 $50.00
25 345620135872 Debit 30MAR1990 .
---------------------- SOC_SEC_NUMBER=456-45-3462 --------------------
CHECK_ACCOUNT_
OBS NUMBER TRANTYPE DATE AMOUNT
26 345620134522 Credit 05APR1991 $50.00
27 345620134522 Debit 29MAR1991 $42.73
28 345620134522 Debit 29MAR1991 $172.45
29 345620134522 Debit 30MAR1991 $38.23
30 345620134522 Debit 02APR1991 $10.00
---------------------- SOC_SEC_NUMBER=657-34-3245 --------------------
CHECK_ACCOUNT_
OBS NUMBER TRANTYPE DATE AMOUNT
31 345620131455 Credit 04APR1991 $230.00
32 345620131455 Debit . .
---------------------- SOC_SEC_NUMBER=667-73-8275 --------------------
CHECK_ACCOUNT_
OBS NUMBER TRANTYPE DATE AMOUNT
33 345620145345 Credit 31MAR1991 $1,563.23
34 345620145345 Debit 19MAR1990 .
35 345620145345 Debit 23MAR1991 $820.00
36 345620145345 Debit 23MAR1991 $52.00
37 345620145345 Debit 28MAR1991 $193.00
38 345620154633 Credit 31MAR1991 $1,563.23
39 345620154633 Debit . .
---------------------- SOC_SEC_NUMBER=667-82-8275 --------------------
CHECK_ACCOUNT_
OBS NUMBER TRANTYPE DATE AMOUNT
40 382957492811 Credit 16APR1991 $100.00
41 382957492811 Debit . .
options nodate linesize=120; proc print data=vlib.custacct; title2 'Data Described by VLIB.CUSTACCT'; run; options nodate linesize=80; proc print data=mydata.bankchrg; title2 'Data Described by MYDATA.BANKCHRG'; run;
proc print data=mydata.chgdata; title2 'SAS Data File MYDATA.CHGDATA'; run;
The SAS System
Data Described by VLIB.CUSTACCT
SOC_SEC_ CHECK_ACCOUNT_
OBS NUMBER CUSTOMER_NAME NUMBER
1 667-73-8275 WALLS, HOOPER J. 345620145345
2 667-73-8275 WALLS, HOOPER J. 345620154633
3 434-62-1234 SUMMERS, MARY T. 345620104732
4 436-42-6394 BOOKER, APRIL M. 345620135872
5 434-62-1224 SMITH, JAMES MARTIN 345620134564
6 434-62-1224 SMITH, JAMES MARTIN 345620134663
7 178-42-6534 PATTILLO, RODRIGUES 745920057114
8 156-45-5672 O'CONNOR, JOSEPH 345620123456
9 657-34-3245 BARNHARDT, PAMELA S. 345620131455
10 667-82-8275 COHEN, ABRAHAM 382957492811
11 456-45-3462 LITTLE, NANCY M. 345620134522
12 234-74-4612 WIKOWSKI, JONATHAN S.
345620113263
The SAS System
Data Described by MYDATA.BANKCHRG
OBS ssn accountn chckchrg atmfee loanchrg
1 667-73-8275 345620145345 3.75 5.00 2.00
2 434-62-1234 345620104732 15.00 25.00 552.23
3 436-42-6394 345620135872 1.50 7.50 332.15
4 434-62-1224 345620134564 9.50 0.00 0.00
5 178-42-6534 . 0.50 15.00 223.77
6 156-45-5672 345620123456 0.00 0.00 0.00
7 657-34-3245 345620132455 10.25 10.00 100.00
8 667-82-8275 . 7.50 7.50 175.75
9 456-45-3462 345620134522 23.00 30.00 673.23
10 234-74-4612 345620113262 4.50 7.00 0.00
The SAS System
SAS Data File MYDATA.CHGDATA
OBS account charge
1 345620135872 $10
2 345620134522 $7
3 345620123456 $12
4 382957492811 $3
5 345620134663 $8
6 345620131455 $6
7 345620104732 $9
options nodate linesize=132;
libname sql 'SAS-data-library';
proc sql;
create view sql.charges as
select distinct custacct.soc_sec_number,
custacct.customer_name,
custacct.check_account_number,
chgdata.charge,
bankchrg.chckchrg,
bankchrg.atmfee,
bankchrg.loanchrg
from vlib.custacct,
mydata.bankchrg,
mydata.chgdata
where custacct.soc_sec_number=bankchrg.ssn and
custacct.check_account_number=chgdata.account;
title2 'Banking Charges for the Month';
select * from sql.charges;
The SAS System
Banking Charges for the Month
SOC_SEC_ CHECK_ACCOUNT_
NUMBER CUSTOMER_NAME NUMBER charge chckchrg atmfee loanchrg
----------------------------------------------------------------------------------------
156-45-5672 O'CONNOR, JOSEPH 345620123456 $12 0.00 0.00 0.00
434-62-1224 SMITH, JAMES MARTIN 345620134663 $8 9.50 0.00 0.00
434-62-1234 SUMMERS, MARY T. 345620104732 $9 15.00 25.00 552.23
436-42-6394 BOOKER, APRIL M. 345620135872 $10 1.50 7.50 332.15
456-45-3462 LITTLE, NANCY M. 345620134522 $7 23.00 30.00 673.23
657-34-3245 BARNHARDT, PAMELA S. 345620131455 $6 10.25 10.00 100.00
667-82-8275 COHEN, ABRAHAM 382957492811 $3 7.50 7.50 175.75
options nodate linesize=80;
proc sql;
title2 'Average Savings Balance Per City';
select distinct city,
avg(savings_balance) label='Average Balance'
format=dollar12.2
from vlib.savebal
where city is not missing
group by city;
The SAS System
Average Savings Balance Per City
Average
CITY Balance
------------------------------------------
CHARLOTTESVILLE $1,673.35
GORDONSVILLE $4,758.26
ORANGE $615.60
RAPIDAN $672.63
RICHMOND $924.62