301.END-TO-END SAS PROCESSING AND REPORTING OF INDIAN ZOO DATA USING SORTING, MERGING, SQL-BASED INSIGHTS, AND TLF-ORIENTED REPORTING PROCS, CROSS-TABULATION, STRUCTURED REPORT GENERATION
END-TO-END SAS PROCESSING AND REPORTING OF INDIAN ZOO DATA USING SORTING, MERGING,SQL-BASED INSIGHTS, AND TLF-ORIENTED REPORTING PROCS, CROSS-TABULATION, STRUCTURED REPORT GENERATION
1. Dataset Creation
data Indian_Zoos;
input ZooID$ ZooName:$25. City:$18. State:$14. NumAnimals Rating;
datalines;
Z001 MysoreZoo Mysuru Karnataka 1600 4.8
Z002 NehruZoo Hyderabad Telangana 1500 4.6
Z003 DelhiZoo Delhi Delhi 1300 4.4
Z004 ArignarZoo Chennai TamilNadu 2100 4.7
Z005 Nandankanan Bhubaneswar Odisha 1900 4.8
Z006 AliporeZoo Kolkata WestBengal 1200 4.3
Z007 RajivGandhiZoo Pune Maharashtra 1400 4.5
Z008 IndiraGandhiZoo Visakhapatnam AndhraPradesh 1700 4.6
Z009 ChhatbirZoo Chandigarh Punjab 1100 4.2
Z010 SayajiZoo Vadodara Gujarat 1000 4.1
Z011 KamlaNehruZoo Ahmedabad Gujarat 1150 4.3
Z012 SanjayGandhiPark Mumbai Maharashtra 900 4.0
;
run;
proc print data=Indian_Zoos;
run;
OUTPUT:
| Obs | ZooID | ZooName | City | State | NumAnimals | Rating |
|---|---|---|---|---|---|---|
| 1 | Z001 | MysoreZoo | Mysuru | Karnataka | 1600 | 4.8 |
| 2 | Z002 | NehruZoo | Hyderabad | Telangana | 1500 | 4.6 |
| 3 | Z003 | DelhiZoo | Delhi | Delhi | 1300 | 4.4 |
| 4 | Z004 | ArignarZoo | Chennai | TamilNadu | 2100 | 4.7 |
| 5 | Z005 | Nandankanan | Bhubaneswar | Odisha | 1900 | 4.8 |
| 6 | Z006 | AliporeZoo | Kolkata | WestBengal | 1200 | 4.3 |
| 7 | Z007 | RajivGandhiZoo | Pune | Maharashtra | 1400 | 4.5 |
| 8 | Z008 | IndiraGandhiZoo | Visakhapatnam | AndhraPradesh | 1700 | 4.6 |
| 9 | Z009 | ChhatbirZoo | Chandigarh | Punjab | 1100 | 4.2 |
| 10 | Z010 | SayajiZoo | Vadodara | Gujarat | 1000 | 4.1 |
| 11 | Z011 | KamlaNehruZoo | Ahmedabad | Gujarat | 1150 | 4.3 |
| 12 | Z012 | SanjayGandhiPark | Mumbai | Maharashtra | 900 | 4.0 |
2. Proc Sort By Highest Animals
Proc sort data=Indian_Zoos Out=ZooSorted;
by descending numanimals;
run;
proc print data=zoosorted;
run;
OUTPUT:
| Obs | ZooID | ZooName | City | State | NumAnimals | Rating |
|---|---|---|---|---|---|---|
| 1 | Z004 | ArignarZoo | Chennai | TamilNadu | 2100 | 4.7 |
| 2 | Z005 | Nandankanan | Bhubaneswar | Odisha | 1900 | 4.8 |
| 3 | Z008 | IndiraGandhiZoo | Visakhapatnam | AndhraPradesh | 1700 | 4.6 |
| 4 | Z001 | MysoreZoo | Mysuru | Karnataka | 1600 | 4.8 |
| 5 | Z002 | NehruZoo | Hyderabad | Telangana | 1500 | 4.6 |
| 6 | Z007 | RajivGandhiZoo | Pune | Maharashtra | 1400 | 4.5 |
| 7 | Z003 | DelhiZoo | Delhi | Delhi | 1300 | 4.4 |
| 8 | Z006 | AliporeZoo | Kolkata | WestBengal | 1200 | 4.3 |
| 9 | Z011 | KamlaNehruZoo | Ahmedabad | Gujarat | 1150 | 4.3 |
| 10 | Z009 | ChhatbirZoo | Chandigarh | Punjab | 1100 | 4.2 |
| 11 | Z010 | SayajiZoo | Vadodara | Gujarat | 1000 | 4.1 |
| 12 | Z012 | SanjayGandhiPark | Mumbai | Maharashtra | 900 | 4.0 |
3. Creation Of 2 More Variables
data Zoo_more;
input ZooID$ EntryFee Area_Acres;
datalines;
Z001 100 157
Z002 60 380
Z003 80 176
Z004 90 602
Z005 70 1080
Z006 50 46
Z007 60 130
Z008 50 625
Z009 40 505
Z010 30 113
Z011 35 117
Z012 70 104
;
run;
proc print data=Zoo_more;
run;
OUTPUT:
| Obs | ZooID | EntryFee | Area_Acres |
|---|---|---|---|
| 1 | Z001 | 100 | 157 |
| 2 | Z002 | 60 | 380 |
| 3 | Z003 | 80 | 176 |
| 4 | Z004 | 90 | 602 |
| 5 | Z005 | 70 | 1080 |
| 6 | Z006 | 50 | 46 |
| 7 | Z007 | 60 | 130 |
| 8 | Z008 | 50 | 625 |
| 9 | Z009 | 40 | 505 |
| 10 | Z010 | 30 | 113 |
| 11 | Z011 | 35 | 117 |
| 12 | Z012 | 70 | 104 |
4. Merge 2 Datasets
data Full_Zoo;
merge Indian_Zoos
Zoo_More;
by ZooID;
run;
proc print data=Full_Zoo;
run;
OUTPUT:
| Obs | ZooID | ZooName | City | State | NumAnimals | Rating | EntryFee | Area_Acres |
|---|---|---|---|---|---|---|---|---|
| 1 | Z001 | MysoreZoo | Mysuru | Karnataka | 1600 | 4.8 | 100 | 157 |
| 2 | Z002 | NehruZoo | Hyderabad | Telangana | 1500 | 4.6 | 60 | 380 |
| 3 | Z003 | DelhiZoo | Delhi | Delhi | 1300 | 4.4 | 80 | 176 |
| 4 | Z004 | ArignarZoo | Chennai | TamilNadu | 2100 | 4.7 | 90 | 602 |
| 5 | Z005 | Nandankanan | Bhubaneswar | Odisha | 1900 | 4.8 | 70 | 1080 |
| 6 | Z006 | AliporeZoo | Kolkata | WestBengal | 1200 | 4.3 | 50 | 46 |
| 7 | Z007 | RajivGandhiZoo | Pune | Maharashtra | 1400 | 4.5 | 60 | 130 |
| 8 | Z008 | IndiraGandhiZoo | Visakhapatnam | AndhraPradesh | 1700 | 4.6 | 50 | 625 |
| 9 | Z009 | ChhatbirZoo | Chandigarh | Punjab | 1100 | 4.2 | 40 | 505 |
| 10 | Z010 | SayajiZoo | Vadodara | Gujarat | 1000 | 4.1 | 30 | 113 |
| 11 | Z011 | KamlaNehruZoo | Ahmedabad | Gujarat | 1150 | 4.3 | 35 | 117 |
| 12 | Z012 | SanjayGandhiPark | Mumbai | Maharashtra | 900 | 4.0 | 70 | 104 |
5. Proc Means(Statistical Summary)
proc means data=full_zoo n mean min max;
var NumAnimals Rating;
class zooid;
output out=zoo_mean
n = N_
mean = Mean_
min = Min_
max = Max_;
run;
proc print data=zoo_mean Label;
label N_ = 'N'
Mean_ = 'Mean'
Min_ = 'Min'
Max_ = 'Max';
run;
OUTPUT:
The MEANS Procedure
| ZooID | N Obs | Variable | N | Mean | Minimum | Maximum |
|---|---|---|---|---|---|---|
| Z001 | 1 | NumAnimals Rating | 1 1 | 1600.00 4.8000000 | 1600.00 4.8000000 | 1600.00 4.8000000 |
| Z002 | 1 | NumAnimals Rating | 1 1 | 1500.00 4.6000000 | 1500.00 4.6000000 | 1500.00 4.6000000 |
| Z003 | 1 | NumAnimals Rating | 1 1 | 1300.00 4.4000000 | 1300.00 4.4000000 | 1300.00 4.4000000 |
| Z004 | 1 | NumAnimals Rating | 1 1 | 2100.00 4.7000000 | 2100.00 4.7000000 | 2100.00 4.7000000 |
| Z005 | 1 | NumAnimals Rating | 1 1 | 1900.00 4.8000000 | 1900.00 4.8000000 | 1900.00 4.8000000 |
| Z006 | 1 | NumAnimals Rating | 1 1 | 1200.00 4.3000000 | 1200.00 4.3000000 | 1200.00 4.3000000 |
| Z007 | 1 | NumAnimals Rating | 1 1 | 1400.00 4.5000000 | 1400.00 4.5000000 | 1400.00 4.5000000 |
| Z008 | 1 | NumAnimals Rating | 1 1 | 1700.00 4.6000000 | 1700.00 4.6000000 | 1700.00 4.6000000 |
| Z009 | 1 | NumAnimals Rating | 1 1 | 1100.00 4.2000000 | 1100.00 4.2000000 | 1100.00 4.2000000 |
| Z010 | 1 | NumAnimals Rating | 1 1 | 1000.00 4.1000000 | 1000.00 4.1000000 | 1000.00 4.1000000 |
| Z011 | 1 | NumAnimals Rating | 1 1 | 1150.00 4.3000000 | 1150.00 4.3000000 | 1150.00 4.3000000 |
| Z012 | 1 | NumAnimals Rating | 1 1 | 900.0000000 4.0000000 | 900.0000000 4.0000000 | 900.0000000 4.0000000 |
| Obs | ZooID | _TYPE_ | _FREQ_ | N | Mean | Min | Max |
|---|---|---|---|---|---|---|---|
| 1 | 0 | 12 | 12 | 1404.17 | 900 | 2100 | |
| 2 | Z001 | 1 | 1 | 1 | 1600.00 | 1600 | 1600 |
| 3 | Z002 | 1 | 1 | 1 | 1500.00 | 1500 | 1500 |
| 4 | Z003 | 1 | 1 | 1 | 1300.00 | 1300 | 1300 |
| 5 | Z004 | 1 | 1 | 1 | 2100.00 | 2100 | 2100 |
| 6 | Z005 | 1 | 1 | 1 | 1900.00 | 1900 | 1900 |
| 7 | Z006 | 1 | 1 | 1 | 1200.00 | 1200 | 1200 |
| 8 | Z007 | 1 | 1 | 1 | 1400.00 | 1400 | 1400 |
| 9 | Z008 | 1 | 1 | 1 | 1700.00 | 1700 | 1700 |
| 10 | Z009 | 1 | 1 | 1 | 1100.00 | 1100 | 1100 |
| 11 | Z010 | 1 | 1 | 1 | 1000.00 | 1000 | 1000 |
| 12 | Z011 | 1 | 1 | 1 | 1150.00 | 1150 | 1150 |
| 13 | Z012 | 1 | 1 | 1 | 900.00 | 900 | 900 |
6. Proc Freq(Zoos by State)
proc freq data=indian_zoos;
table state;
run;
OUTPUT:
The FREQ Procedure
| State | Frequency | Percent | Cumulative Frequency | Cumulative Percent |
|---|---|---|---|---|
| AndhraPradesh | 1 | 8.33 | 1 | 8.33 |
| Delhi | 1 | 8.33 | 2 | 16.67 |
| Gujarat | 2 | 16.67 | 4 | 33.33 |
| Karnataka | 1 | 8.33 | 5 | 41.67 |
| Maharashtra | 2 | 16.67 | 7 | 58.33 |
| Odisha | 1 | 8.33 | 8 | 66.67 |
| Punjab | 1 | 8.33 | 9 | 75.00 |
| TamilNadu | 1 | 8.33 | 10 | 83.33 |
| Telangana | 1 | 8.33 | 11 | 91.67 |
| WestBengal | 1 | 8.33 | 12 | 100.00 |
7. Proc Sql Analysis
7.1 Top 5 Zoos by Rating
proc sql outobs=5;
select ZooID, ZooName, City ,State ,NumAnimals ,Rating
from Indian_Zoos
order rating desc;
quit;
OUTPUT:
| ZooID | ZooName | City | State | NumAnimals | Rating |
|---|---|---|---|---|---|
| Z005 | Nandankanan | Bhubaneswar | Odisha | 1900 | 4.8 |
| Z001 | MysoreZoo | Mysuru | Karnataka | 1600 | 4.8 |
| Z004 | ArignarZoo | Chennai | TamilNadu | 2100 | 4.7 |
| Z002 | NehruZoo | Hyderabad | Telangana | 1500 | 4.6 |
| Z008 | IndiraGandhiZoo | Visakhapatnam | AndhraPradesh | 1700 | 4.6 |
7.2 Average Rating by State
proc sql;
select State , avg(rating) as AvgRating format=5.2
from Indian_Zoos
group by state
order by state;
quit;
OUTPUT:
| State | AvgRating |
|---|---|
| AndhraPradesh | 4.60 |
| Delhi | 4.40 |
| Gujarat | 4.20 |
| Karnataka | 4.80 |
| Maharashtra | 4.25 |
| Odisha | 4.80 |
| Punjab | 4.20 |
| TamilNadu | 4.70 |
| Telangana | 4.60 |
| WestBengal | 4.30 |
7.3 Zoos With Above-Average Number of Animals
proc sql;
select ZooID, ZooName,NumAnimals
from Indian_Zoos
where NumAnimals > (select Avg(NumAnimals)
from Indian_Zoos)
order by NumAnimals Desc;
quit;
OUTPUT:
| ZooID | ZooName | NumAnimals |
|---|---|---|
| Z004 | ArignarZoo | 2100 |
| Z005 | Nandankanan | 1900 |
| Z008 | IndiraGandhiZoo | 1700 |
| Z001 | MysoreZoo | 1600 |
| Z002 | NehruZoo | 1500 |
8. Proc Report
title "SUMMARY TABLE OF INDIAN ZOOS";
proc report data=full_Zoo nowd;
column ZooID ZooName State NumAnimals Rating;
define ZooID / Display 'Zoo ID';
define ZooName / Display 'Zoo Name';
define State / Group 'State';
define NumAnimals / analysis 'No. Of Animals';
define Rating / analysis 'Rating';
run;
OUTPUT:
| Zoo ID | Zoo Name | State | No. Of Animals | Rating |
|---|---|---|---|---|
| Z008 | IndiraGandhiZoo | AndhraPradesh | 1700 | 4.6 |
| Z003 | DelhiZoo | Delhi | 1300 | 4.4 |
| Z010 | SayajiZoo | Gujarat | 1000 | 4.1 |
| Z011 | KamlaNehruZoo | 1150 | 4.3 | |
| Z001 | MysoreZoo | Karnataka | 1600 | 4.8 |
| Z007 | RajivGandhiZoo | Maharashtra | 1400 | 4.5 |
| Z012 | SanjayGandhiPark | 900 | 4 | |
| Z005 | Nandankanan | Odisha | 1900 | 4.8 |
| Z009 | ChhatbirZoo | Punjab | 1100 | 4.2 |
| Z004 | ArignarZoo | TamilNadu | 2100 | 4.7 |
| Z002 | NehruZoo | Telangana | 1500 | 4.6 |
| Z006 | AliporeZoo | WestBengal | 1200 | 4.3 |
9. Proc Tabulate
title "CROSS TABULATION OF ZOO ANIMALS AND RATINGS";
proc tabulate data=full_zoo;
class state;
var NumAnimals Rating;
table state,(NumAnimals Rating)*(mean min max);
run;
OUTPUT:
| NumAnimals | Rating | |||||
|---|---|---|---|---|---|---|
| Mean | Min | Max | Mean | Min | Max | |
| State | 1700.00 | 1700.00 | 1700.00 | 4.60 | 4.60 | 4.60 |
| AndhraPradesh | ||||||
| Delhi | 1300.00 | 1300.00 | 1300.00 | 4.40 | 4.40 | 4.40 |
| Gujarat | 1075.00 | 1000.00 | 1150.00 | 4.20 | 4.10 | 4.30 |
| Karnataka | 1600.00 | 1600.00 | 1600.00 | 4.80 | 4.80 | 4.80 |
| Maharashtra | 1150.00 | 900.00 | 1400.00 | 4.25 | 4.00 | 4.50 |
| Odisha | 1900.00 | 1900.00 | 1900.00 | 4.80 | 4.80 | 4.80 |
| Punjab | 1100.00 | 1100.00 | 1100.00 | 4.20 | 4.20 | 4.20 |
| TamilNadu | 2100.00 | 2100.00 | 2100.00 | 4.70 | 4.70 | 4.70 |
| Telangana | 1500.00 | 1500.00 | 1500.00 | 4.60 | 4.60 | 4.60 |
| WestBengal | 1200.00 | 1200.00 | 1200.00 | 4.30 | 4.30 | 4.30 |
10.Macro: Zoo Report
%macro zoo_report(state=);
title "ZOO REPORT FOR &state";
proc print data=indian_zoos noobs;
where State = "&state";
run;
title "SUMMARY FOR &state";
proc means data=indian_zoos mean min max;
where State = "&state";
var NumAnimals Rating;
run;
title "FREQUENCY FOR &state";
proc freq data=indian_zoos;
where State = "&state";
tables State;
run;
%mend;
%zoo_report(state=Karnataka);
OUTPUT:
| ZooID | ZooName | City | State | NumAnimals | Rating |
|---|---|---|---|---|---|
| Z001 | MysoreZoo | Mysuru | Karnataka | 1600 | 4.8 |
The MEANS Procedure
| Variable | Mean | Minimum | Maximum |
|---|---|---|---|
NumAnimals Rating | 1600.00 4.8000000 | 1600.00 4.8000000 | 1600.00 4.8000000 |
The FREQ Procedure
| State | Frequency | Percent | Cumulative Frequency | Cumulative Percent |
|---|---|---|---|---|
| Karnataka | 1 | 100.00 | 1 | 100.00 |
%zoo_report(state=Telangana);
OUTPUT:
| ZooID | ZooName | City | State | NumAnimals | Rating |
|---|---|---|---|---|---|
| Z002 | NehruZoo | Hyderabad | Telangana | 1500 | 4.6 |
The MEANS Procedure
| Variable | Mean | Minimum | Maximum |
|---|---|---|---|
NumAnimals Rating | 1500.00 4.6000000 | 1500.00 4.6000000 | 1500.00 4.6000000 |
The FREQ Procedure
| State | Frequency | Percent | Cumulative Frequency | Cumulative Percent |
|---|---|---|---|---|
| Telangana | 1 | 100.00 | 1 | 100.00 |
Comments
Post a Comment