RESTAURANT CUISINE IN INDIA — SAS MINI-PROJECT DATA CREATION | PROC FORMAT | PROC CONTENTS | PROC PRINT | PROC FREQ | PROC MEANS | PROC SUMMARY | PROC SQL | PROC RANK | PROC TRANSPOSE | PROC SGPLOT | MACROS
/*Creating A Dataset Of RESTAURANT CUISINE IN INDIA */
1) FORMATS: for clean display of flags
proc format;
value yesno 0='No'
1='Yes';
value rupee low-high = [comma10.];
run;
Log:
2) DATA CREATION: base table
data work.restaurants_india;
length Restaurant_ID 8
Restaurant_Name $40 City $20 State $20 Cuisine $20
Veg_Flag 8 Delivery_Flag 8 Reservation_Flag 8 DineIn_Flag 8
Price_For_Two 8 Rating 8 Votes 8 Seating_Capacity 8 Opening_Year 8
Chain_Name $25;
informat Last_Updated yymmdd10.;
format Veg_Flag Delivery_Flag Reservation_Flag DineIn_Flag yesno.
Price_For_Two rupee. Rating 3.1 Last_Updated yymmdd10.;
infile datalines dsd truncover;
input Restaurant_ID
Restaurant_Name :$40.
City :$20.
State :$20.
Cuisine :$20.
Veg_Flag
Delivery_Flag
Reservation_Flag
DineIn_Flag
Price_For_Two
Rating
Votes
Seating_Capacity
Opening_Year
Chain_Name :$25.
Last_Updated;
datalines;
1,"Biryani Blues","Hyderabad","Telangana","Hyderabadi",0,1,1,1,800,4.4,12500,80,2015,"Biryani Blues","2025-08-01"
2,"Chutneys","Hyderabad","Telangana","South Indian",1,0,1,1,900,4.3,8200,120,2003,"","2025-08-01"
3,"Paradise","Hyderabad","Telangana","Hyderabadi",0,1,1,1,850,4.1,22000,150,1953,"Paradise","2025-08-01"
4,"Saravana Bhavan","Chennai","Tamil Nadu","South Indian",1,1,1,1,750,4.2,30000,140,1981,"Saravana Bhavan","2025-08-02"
5,"A2B (Adyar Ananda Bhavan)","Chennai","Tamil Nadu","South Indian",1,1,0,1,650,4.0,18000,130,1988,"A2B","2025-08-02"
6,"Karavalli","Bengaluru","Karnataka","Coastal",0,0,1,1,2000,4.6,5400,90,1994,"","2025-08-02"
7,"Truffles","Bengaluru","Karnataka","Continental",0,1,0,1,1200,4.3,27000,110,2000,"Truffles","2025-08-03"
8,"MTR","Bengaluru","Karnataka","South Indian",1,0,0,1,500,4.5,35000,100,1924,"MTR","2025-08-03"
9,"Bademiya","Mumbai","Maharashtra","North Indian",0,1,0,0,1000,4.2,22000,60,1946,"","2025-08-03"
10,"The Bombay Canteen","Mumbai","Maharashtra","Modern Indian",0,0,1,1,2500,4.7,9000,85,2015,"","2025-08-04"
11,"Leopold Cafe","Mumbai","Maharashtra","Continental",0,1,0,1,1800,4.1,40000,160,1871,"","2025-08-04"
12,"Oh! Calcutta","Kolkata","West Bengal","Bengali",0,1,1,1,1500,4.4,8000,100,1994,"Oh! Calcutta","2025-08-04"
13,"6 Ballygunge Place","Kolkata","West Bengal","Bengali",0,0,1,1,1300,4.5,6000,90,2003,"","2025-08-04"
14,"Peter Cat","Kolkata","West Bengal","Continental",0,0,0,1,1200,4.2,25000,120,1975,"","2025-08-04"
;
run;
proc print;run;
Output:
| Obs | Restaurant_ID | Restaurant_Name | City | State | Cuisine | Veg_Flag | Delivery_Flag | Reservation_Flag | DineIn_Flag | Price_For_Two | Rating | Votes | Seating_Capacity | Opening_Year | Chain_Name | Last_Updated |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | Biryani Blues | Hyderabad | Telangana | Hyderabadi | No | Yes | Yes | Yes | 800 | 4.4 | 12500 | 80 | 2015 | Biryani Blues | 2025-08-01 |
| 2 | 2 | Chutneys | Hyderabad | Telangana | South Indian | Yes | No | Yes | Yes | 900 | 4.3 | 8200 | 120 | 2003 | 2025-08-01 | |
| 3 | 3 | Paradise | Hyderabad | Telangana | Hyderabadi | No | Yes | Yes | Yes | 850 | 4.1 | 22000 | 150 | 1953 | Paradise | 2025-08-01 |
| 4 | 4 | Saravana Bhavan | Chennai | Tamil Nadu | South Indian | Yes | Yes | Yes | Yes | 750 | 4.2 | 30000 | 140 | 1981 | Saravana Bhavan | 2025-08-02 |
| 5 | 5 | A2B (Adyar Ananda Bhavan) | Chennai | Tamil Nadu | South Indian | Yes | Yes | No | Yes | 650 | 4.0 | 18000 | 130 | 1988 | A2B | 2025-08-02 |
| 6 | 6 | Karavalli | Bengaluru | Karnataka | Coastal | No | No | Yes | Yes | 2,000 | 4.6 | 5400 | 90 | 1994 | 2025-08-02 | |
| 7 | 7 | Truffles | Bengaluru | Karnataka | Continental | No | Yes | No | Yes | 1,200 | 4.3 | 27000 | 110 | 2000 | Truffles | 2025-08-03 |
| 8 | 8 | MTR | Bengaluru | Karnataka | South Indian | Yes | No | No | Yes | 500 | 4.5 | 35000 | 100 | 1924 | MTR | 2025-08-03 |
| 9 | 9 | Bademiya | Mumbai | Maharashtra | North Indian | No | Yes | No | No | 1,000 | 4.2 | 22000 | 60 | 1946 | 2025-08-03 | |
| 10 | 10 | The Bombay Canteen | Mumbai | Maharashtra | Modern Indian | No | No | Yes | Yes | 2,500 | 4.7 | 9000 | 85 | 2015 | 2025-08-04 | |
| 11 | 11 | Leopold Cafe | Mumbai | Maharashtra | Continental | No | Yes | No | Yes | 1,800 | 4.1 | 40000 | 160 | 1871 | 2025-08-04 | |
| 12 | 12 | Oh! Calcutta | Kolkata | West Bengal | Bengali | No | Yes | Yes | Yes | 1,500 | 4.4 | 8000 | 100 | 1994 | Oh! Calcutta | 2025-08-04 |
| 13 | 13 | 6 Ballygunge Place | Kolkata | West Bengal | Bengali | No | No | Yes | Yes | 1,300 | 4.5 | 6000 | 90 | 2003 | 2025-08-04 | |
| 14 | 14 | Peter Cat | Kolkata | West Bengal | Continental | No | No | No | Yes | 1,200 | 4.2 | 25000 | 120 | 1975 | 2025-08-04 |
3) QUICK STRUCTURE CHECK
proc contents data=work.restaurants_india varnum;
title "Structure of RESTAURANTS_INDIA";
run;
Output:
The CONTENTS Procedure
| Data Set Name | WORK.RESTAURANTS_INDIA | Observations | 14 |
|---|---|---|---|
| Member Type | DATA | Variables | 16 |
| Engine | V9 | Indexes | 0 |
| Created | 08/23/2025 19:02:35 | Observation Length | 216 |
| Last Modified | 08/23/2025 19:02:35 | Deleted Observations | 0 |
| Protection | Compressed | NO | |
| Data Set Type | Sorted | NO | |
| Label | |||
| Data Representation | SOLARIS_X86_64, LINUX_X86_64, ALPHA_TRU64, LINUX_IA64 | ||
| Encoding | utf-8 Unicode (UTF-8) |
| Engine/Host Dependent Information | |
|---|---|
| Data Set Page Size | 131072 |
| Number of Data Set Pages | 1 |
| First Data Page | 1 |
| Max Obs per Page | 606 |
| Obs in First Data Page | 14 |
| Number of Data Set Repairs | 0 |
| Filename | /saswork/SAS_work850B0000C87B_odaws01-apse1-2.oda.sas.com/SAS_workCA340000C87B_odaws01-apse1-2.oda.sas.com/restaurants_india.sas7bdat |
| Release Created | 9.0401M8 |
| Host Created | Linux |
| Inode Number | 201328202 |
| Access Permission | rw-r--r-- |
| Owner Name | u63247146 |
| File Size | 256KB |
| File Size (bytes) | 262144 |
| Variables in Creation Order | |||||
|---|---|---|---|---|---|
| # | Variable | Type | Len | Format | Informat |
| 1 | Restaurant_ID | Num | 8 | ||
| 2 | Restaurant_Name | Char | 40 | ||
| 3 | City | Char | 20 | ||
| 4 | State | Char | 20 | ||
| 5 | Cuisine | Char | 20 | ||
| 6 | Veg_Flag | Num | 8 | YESNO. | |
| 7 | Delivery_Flag | Num | 8 | YESNO. | |
| 8 | Reservation_Flag | Num | 8 | YESNO. | |
| 9 | DineIn_Flag | Num | 8 | YESNO. | |
| 10 | Price_For_Two | Num | 8 | RUPEE. | |
| 11 | Rating | Num | 8 | 3.1 | |
| 12 | Votes | Num | 8 | ||
| 13 | Seating_Capacity | Num | 8 | ||
| 14 | Opening_Year | Num | 8 | ||
| 15 | Chain_Name | Char | 25 | ||
| 16 | Last_Updated | Num | 8 | YYMMDD10. | YYMMDD10. |
4) BASIC BROWSE
proc print data=work.restaurants_india (obs=10) noobs label;
var Restaurant_ID Restaurant_Name City State Cuisine Veg_Flag Delivery_Flag Reservation_Flag DineIn_Flag
Price_For_Two Rating Votes Seating_Capacity Opening_Year Chain_Name Last_Updated;
title "Sample Rows — Formatted Flags & Prices";
run;
Output:
| Restaurant_ID | Restaurant_Name | City | State | Cuisine | Veg_Flag | Delivery_Flag | Reservation_Flag | DineIn_Flag | Price_For_Two | Rating | Votes | Seating_Capacity | Opening_Year | Chain_Name | Last_Updated |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Biryani Blues | Hyderabad | Telangana | Hyderabadi | No | Yes | Yes | Yes | 800 | 4.4 | 12500 | 80 | 2015 | Biryani Blues | 2025-08-01 |
| 2 | Chutneys | Hyderabad | Telangana | South Indian | Yes | No | Yes | Yes | 900 | 4.3 | 8200 | 120 | 2003 | 2025-08-01 | |
| 3 | Paradise | Hyderabad | Telangana | Hyderabadi | No | Yes | Yes | Yes | 850 | 4.1 | 22000 | 150 | 1953 | Paradise | 2025-08-01 |
| 4 | Saravana Bhavan | Chennai | Tamil Nadu | South Indian | Yes | Yes | Yes | Yes | 750 | 4.2 | 30000 | 140 | 1981 | Saravana Bhavan | 2025-08-02 |
| 5 | A2B (Adyar Ananda Bhavan) | Chennai | Tamil Nadu | South Indian | Yes | Yes | No | Yes | 650 | 4.0 | 18000 | 130 | 1988 | A2B | 2025-08-02 |
| 6 | Karavalli | Bengaluru | Karnataka | Coastal | No | No | Yes | Yes | 2,000 | 4.6 | 5400 | 90 | 1994 | 2025-08-02 | |
| 7 | Truffles | Bengaluru | Karnataka | Continental | No | Yes | No | Yes | 1,200 | 4.3 | 27000 | 110 | 2000 | Truffles | 2025-08-03 |
| 8 | MTR | Bengaluru | Karnataka | South Indian | Yes | No | No | Yes | 500 | 4.5 | 35000 | 100 | 1924 | MTR | 2025-08-03 |
| 9 | Bademiya | Mumbai | Maharashtra | North Indian | No | Yes | No | No | 1,000 | 4.2 | 22000 | 60 | 1946 | 2025-08-03 | |
| 10 | The Bombay Canteen | Mumbai | Maharashtra | Modern Indian | No | No | Yes | Yes | 2,500 | 4.7 | 9000 | 85 | 2015 | 2025-08-04 |
5) DISTRIBUTIONS
proc freq data=work.restaurants_india;
tables City State Cuisine Veg_Flag*City / nocum nopercent;
title "Frequency: City, State, Cuisine & Veg-by-City";
run;
Output:
The FREQ Procedure
| City | Frequency |
|---|---|
| Bengaluru | 3 |
| Chennai | 2 |
| Hyderabad | 3 |
| Kolkata | 3 |
| Mumbai | 3 |
| State | Frequency |
|---|---|
| Karnataka | 3 |
| Maharashtra | 3 |
| Tamil Nadu | 2 |
| Telangana | 3 |
| West Bengal | 3 |
| Cuisine | Frequency |
|---|---|
| Bengali | 2 |
| Coastal | 1 |
| Continental | 3 |
| Hyderabadi | 2 |
| Modern Indian | 1 |
| North Indian | 1 |
| South Indian | 4 |
|
| ||||||||||||||||||||||||||||||||||||||||||
6) SUMMARY STATS
proc means data=work.restaurants_india n mean median min p25 p75 max maxdec=1;
class City Cuisine;
var Price_For_Two Rating Votes Seating_Capacity;
title "Descriptive Statistics by City and Cuisine";
run;
Output:
The MEANS Procedure
| City | Cuisine | N Obs | Variable | N | Mean | Median | Minimum | 25th Pctl | 75th Pctl | Maximum |
|---|---|---|---|---|---|---|---|---|---|---|
| Bengaluru | Coastal | 1 | Price_For_Two Rating Votes Seating_Capacity | 1 1 1 1 | 2000.0 4.6 5400.0 90.0 | 2000.0 4.6 5400.0 90.0 | 2000.0 4.6 5400.0 90.0 | 2000.0 4.6 5400.0 90.0 | 2000.0 4.6 5400.0 90.0 | 2000.0 4.6 5400.0 90.0 |
| Continental | 1 | Price_For_Two Rating Votes Seating_Capacity | 1 1 1 1 | 1200.0 4.3 27000.0 110.0 | 1200.0 4.3 27000.0 110.0 | 1200.0 4.3 27000.0 110.0 | 1200.0 4.3 27000.0 110.0 | 1200.0 4.3 27000.0 110.0 | 1200.0 4.3 27000.0 110.0 | |
| South Indian | 1 | Price_For_Two Rating Votes Seating_Capacity | 1 1 1 1 | 500.0 4.5 35000.0 100.0 | 500.0 4.5 35000.0 100.0 | 500.0 4.5 35000.0 100.0 | 500.0 4.5 35000.0 100.0 | 500.0 4.5 35000.0 100.0 | 500.0 4.5 35000.0 100.0 | |
| Chennai | South Indian | 2 | Price_For_Two Rating Votes Seating_Capacity | 2 2 2 2 | 700.0 4.1 24000.0 135.0 | 700.0 4.1 24000.0 135.0 | 650.0 4.0 18000.0 130.0 | 650.0 4.0 18000.0 130.0 | 750.0 4.2 30000.0 140.0 | 750.0 4.2 30000.0 140.0 |
| Hyderabad | Hyderabadi | 2 | Price_For_Two Rating Votes Seating_Capacity | 2 2 2 2 | 825.0 4.3 17250.0 115.0 | 825.0 4.3 17250.0 115.0 | 800.0 4.1 12500.0 80.0 | 800.0 4.1 12500.0 80.0 | 850.0 4.4 22000.0 150.0 | 850.0 4.4 22000.0 150.0 |
| South Indian | 1 | Price_For_Two Rating Votes Seating_Capacity | 1 1 1 1 | 900.0 4.3 8200.0 120.0 | 900.0 4.3 8200.0 120.0 | 900.0 4.3 8200.0 120.0 | 900.0 4.3 8200.0 120.0 | 900.0 4.3 8200.0 120.0 | 900.0 4.3 8200.0 120.0 | |
| Kolkata | Bengali | 2 | Price_For_Two Rating Votes Seating_Capacity | 2 2 2 2 | 1400.0 4.5 7000.0 95.0 | 1400.0 4.5 7000.0 95.0 | 1300.0 4.4 6000.0 90.0 | 1300.0 4.4 6000.0 90.0 | 1500.0 4.5 8000.0 100.0 | 1500.0 4.5 8000.0 100.0 |
| Continental | 1 | Price_For_Two Rating Votes Seating_Capacity | 1 1 1 1 | 1200.0 4.2 25000.0 120.0 | 1200.0 4.2 25000.0 120.0 | 1200.0 4.2 25000.0 120.0 | 1200.0 4.2 25000.0 120.0 | 1200.0 4.2 25000.0 120.0 | 1200.0 4.2 25000.0 120.0 | |
| Mumbai | Continental | 1 | Price_For_Two Rating Votes Seating_Capacity | 1 1 1 1 | 1800.0 4.1 40000.0 160.0 | 1800.0 4.1 40000.0 160.0 | 1800.0 4.1 40000.0 160.0 | 1800.0 4.1 40000.0 160.0 | 1800.0 4.1 40000.0 160.0 | 1800.0 4.1 40000.0 160.0 |
| Modern Indian | 1 | Price_For_Two Rating Votes Seating_Capacity | 1 1 1 1 | 2500.0 4.7 9000.0 85.0 | 2500.0 4.7 9000.0 85.0 | 2500.0 4.7 9000.0 85.0 | 2500.0 4.7 9000.0 85.0 | 2500.0 4.7 9000.0 85.0 | 2500.0 4.7 9000.0 85.0 | |
| North Indian | 1 | Price_For_Two Rating Votes Seating_Capacity | 1 1 1 1 | 1000.0 4.2 22000.0 60.0 | 1000.0 4.2 22000.0 60.0 | 1000.0 4.2 22000.0 60.0 | 1000.0 4.2 22000.0 60.0 | 1000.0 4.2 22000.0 60.0 | 1000.0 4.2 22000.0 60.0 |
7) COLLAPSED CITY SUMMARY DATASET
proc summary data=work.restaurants_india nway;
class City;
var Price_For_Two Rating Votes;
output out=work.city_summary(drop=_:)
n()=N_Restaurants
mean(Price_For_Two)=Avg_Price
mean(Rating)=Avg_Rating
sum(Votes)=Total_Votes;
run;
proc print;run;
Output:
| Obs | City | N_Restaurants | Avg_Price | Avg_Rating | Total_Votes |
|---|---|---|---|---|---|
| 1 | Bengaluru | 3 | 1,233 | 4.5 | 67400 |
| 2 | Chennai | 2 | 700 | 4.1 | 48000 |
| 3 | Hyderabad | 3 | 850 | 4.3 | 42700 |
| 4 | Kolkata | 3 | 1,333 | 4.4 | 39000 |
| 5 | Mumbai | 3 | 1,767 | 4.3 | 71000 |
8) SQL ANALYTICS
proc sql;
create view work.top_modern as
select *
from work.restaurants_india
where Cuisine in ('Modern Indian','Continental')
and Rating >= 4.3;
Cuisine-level KPIs
create table work.cuisine_kpis as
select Cuisine,
count(*) as N,
mean(Price_For_Two) as Avg_Price format=rupee.,
mean(Rating) as Avg_Rating format=3.2,
sum(Votes) as Total_Votes format=comma12.
from work.restaurants_india
group by Cuisine
order by Avg_Rating desc, Total_Votes desc;
"Value Score": normalize price & rating to a simple heuristic
create table work.value_score as
select Restaurant_ID, Restaurant_Name, City, Cuisine, Price_For_Two, Rating, Votes,
(Rating*1000) / (Price_For_Two + 1) as Value_Score format=8.1
from work.restaurants_india
order by Value_Score desc;
quit;
proc print data=work.top_modern;
run;
Output:
| Obs | Restaurant_ID | Restaurant_Name | City | State | Cuisine | Veg_Flag | Delivery_Flag | Reservation_Flag | DineIn_Flag | Price_For_Two | Rating | Votes | Seating_Capacity | Opening_Year | Chain_Name | Last_Updated |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 7 | Truffles | Bengaluru | Karnataka | Continental | No | Yes | No | Yes | 1,200 | 4.3 | 27000 | 110 | 2000 | Truffles | 2025-08-03 |
| 2 | 10 | The Bombay Canteen | Mumbai | Maharashtra | Modern Indian | No | No | Yes | Yes | 2,500 | 4.7 | 9000 | 85 | 2015 | 2025-08-04 |
proc print data=work.cuisine_kpis;
run;
Output:
| Obs | Cuisine | N | Avg_Price | Avg_Rating | Total_Votes |
|---|---|---|---|---|---|
| 1 | Modern Indian | 1 | 2,500 | 4.7 | 9,000 |
| 2 | Coastal | 1 | 2,000 | 4.6 | 5,400 |
| 3 | Bengali | 2 | 1,400 | 4.5 | 14,000 |
| 4 | South Indian | 4 | 700 | 4.3 | 91,200 |
| 5 | Hyderabadi | 2 | 825 | 4.3 | 34,500 |
| 6 | Continental | 3 | 1,400 | 4.2 | 92,000 |
| 7 | North Indian | 1 | 1,000 | 4.2 | 22,000 |
proc print data=work.value_score;
run;
Output:
| Obs | Restaurant_ID | Restaurant_Name | City | Cuisine | Price_For_Two | Rating | Votes | Value_Score |
|---|---|---|---|---|---|---|---|---|
| 1 | 8 | MTR | Bengaluru | South Indian | 500 | 4.5 | 35000 | 9.0 |
| 2 | 5 | A2B (Adyar Ananda Bhavan) | Chennai | South Indian | 650 | 4.0 | 18000 | 6.1 |
| 3 | 4 | Saravana Bhavan | Chennai | South Indian | 750 | 4.2 | 30000 | 5.6 |
| 4 | 1 | Biryani Blues | Hyderabad | Hyderabadi | 800 | 4.4 | 12500 | 5.5 |
| 5 | 3 | Paradise | Hyderabad | Hyderabadi | 850 | 4.1 | 22000 | 4.8 |
| 6 | 2 | Chutneys | Hyderabad | South Indian | 900 | 4.3 | 8200 | 4.8 |
| 7 | 9 | Bademiya | Mumbai | North Indian | 1,000 | 4.2 | 22000 | 4.2 |
| 8 | 7 | Truffles | Bengaluru | Continental | 1,200 | 4.3 | 27000 | 3.6 |
| 9 | 14 | Peter Cat | Kolkata | Continental | 1,200 | 4.2 | 25000 | 3.5 |
| 10 | 13 | 6 Ballygunge Place | Kolkata | Bengali | 1,300 | 4.5 | 6000 | 3.5 |
| 11 | 12 | Oh! Calcutta | Kolkata | Bengali | 1,500 | 4.4 | 8000 | 2.9 |
| 12 | 6 | Karavalli | Bengaluru | Coastal | 2,000 | 4.6 | 5400 | 2.3 |
| 13 | 11 | Leopold Cafe | Mumbai | Continental | 1,800 | 4.1 | 40000 | 2.3 |
| 14 | 10 | The Bombay Canteen | Mumbai | Modern Indian | 2,500 | 4.7 | 9000 | 1.9 |
9) RANKING BY CITY (Rating)
proc rank data=work.restaurants_india out=work.rank_by_city descending ties=low;
by City notsorted;
var Rating;
ranks Rank_in_City;
run;
proc print data=work.rank_by_city noobs;
where Rank_in_City <= 2;
var City Restaurant_Name Cuisine Rating Rank_in_City;
title "Top 2 by Rating within Each City";
run;
Output:
| City | Restaurant_Name | Cuisine | Rating | Rank_in_City |
|---|---|---|---|---|
| Hyderabad | Biryani Blues | Hyderabadi | 4.4 | 1 |
| Hyderabad | Chutneys | South Indian | 4.3 | 2 |
| Chennai | Saravana Bhavan | South Indian | 4.2 | 1 |
| Chennai | A2B (Adyar Ananda Bhavan) | South Indian | 4.0 | 2 |
| Bengaluru | Karavalli | Coastal | 4.6 | 1 |
| Bengaluru | MTR | South Indian | 4.5 | 2 |
| Mumbai | Bademiya | North Indian | 4.2 | 2 |
| Mumbai | The Bombay Canteen | Modern Indian | 4.7 | 1 |
| Kolkata | Oh! Calcutta | Bengali | 4.4 | 2 |
| Kolkata | 6 Ballygunge Place | Bengali | 4.5 | 1 |
10) TRANSPOSE: Avg Price per Cuisine
proc sql;
create table work.city_price as
select City, Cuisine, mean(Price_For_Two) as Avg_Price format=rupee.
from work.restaurants_india
group by City, Cuisine;
quit;
proc transpose data=work.city_price out=work.city_price_wide prefix=Price_;
by City;
id Cuisine;
var Avg_Price;
run;
proc print data=work.city_price_wide label noobs;
title "Average Price for Two by Cuisine (Wide by City)";
run;
Output:
| City | NAME OF FORMER VARIABLE | Price_Coastal | Price_Continental | Price_South Indian | Price_Hyderabadi | Price_Bengali | Price_Modern Indian | Price_North Indian |
|---|---|---|---|---|---|---|---|---|
| Bengaluru | Avg_Price | 2,000 | 1,200 | 500 | . | . | . | . |
| Chennai | Avg_Price | . | . | 700 | . | . | . | . |
| Hyderabad | Avg_Price | . | . | 900 | 825 | . | . | . |
| Kolkata | Avg_Price | . | 1,200 | . | . | 1,400 | . | . |
| Mumbai | Avg_Price | . | 1,800 | . | . | . | 2,500 | 1,000 |
11) SIMPLE VISUAL
ods graphics on;
proc sgplot data=work.restaurants_india;
vbar Cuisine / response=Price_For_Two stat=mean datalabel;
yaxis label="Average Price for Two (INR)";
title "Mean Price for Two by Cuisine";
run;
ods graphics off;
Output:
12) MACRO: City Dashboard
%macro citydash(city=);
title "CITY DASHBOARD: &city";
proc sql;
select "&city" as City length=20,
count(*) as N_Restaurants,
mean(Price_For_Two) format=rupee. as Avg_Price,
mean(Rating) format=3.2 as Avg_Rating,
sum(Votes) format=comma12. as Total_Votes
from work.restaurants_india
where City="&city";
quit;
proc print data=work.rank_by_city noobs;
where City="&city" and Rank_in_City<=3;
var Restaurant_Name Cuisine Rating Rank_in_City;
title3 "Top 3 Rated in &city";
run;
proc freq data=work.restaurants_india nlevels;
where City="&city";
tables Cuisine / nocum;
title3 "Cuisine Mix in &city";
run;
%mend;
%citydash(city=Hyderabad);
Output:
| City | N_Restaurants | Avg_Price | Avg_Rating | Total_Votes |
|---|---|---|---|---|
| Hyderabad | 3 | 850 | 4.3 | 42,700 |
| Restaurant_Name | Cuisine | Rating | Rank_in_City |
|---|---|---|---|
| Biryani Blues | Hyderabadi | 4.4 | 1 |
| Chutneys | South Indian | 4.3 | 2 |
| Paradise | Hyderabadi | 4.1 | 3 |
The FREQ Procedure
| Number of Variable Levels | |
|---|---|
| Variable | Levels |
| Cuisine | 2 |
| Cuisine | Frequency | Percent |
|---|---|---|
| Hyderabadi | 2 | 66.67 |
| South Indian | 1 | 33.33 |
%citydash(city=Bengaluru);
Output:
| City | N_Restaurants | Avg_Price | Avg_Rating | Total_Votes |
|---|---|---|---|---|
| Bengaluru | 3 | 1,233 | 4.5 | 67,400 |
| Restaurant_Name | Cuisine | Rating | Rank_in_City |
|---|---|---|---|
| Karavalli | Coastal | 4.6 | 1 |
| Truffles | Continental | 4.3 | 3 |
| MTR | South Indian | 4.5 | 2 |
The FREQ Procedure
| Number of Variable Levels | |
|---|---|
| Variable | Levels |
| Cuisine | 3 |
| Cuisine | Frequency | Percent |
|---|---|---|
| Coastal | 1 | 33.33 |
| Continental | 1 | 33.33 |
| South Indian | 1 | 33.33 |
No comments:
Post a Comment