237.PASSENGER TRAVEL DATASET ANALYSIS USING PROC PRINT | PROC SORT | PROC FREQ | PROC MEANS | PROC SQL | PROC MACRO | DATA MANIPULATION AGGREGATION FILTERING GROUPING CUSTOM QUERIES IN SAS FOR REAL-WORLD TRANSPORTATION INSIGHTS

PASSENGER TRAVEL DATASET ANALYSIS USING PROC PRINT | PROC SORT | PROC FREQ | PROC MEANS | PROC SQL | PROC MACRO | DATA MANIPULATION AGGREGATION FILTERING GROUPING CUSTOM QUERIES IN SAS FOR REAL-WORLD TRANSPORTATION INSIGHTS

/*A dataset of real-world data of passengers traveling in a bus*/

options nocenter;

1.Creation of dataset

data Bus_Travel;

    length Name $20 Gender $6 StartPoint $15 EndPoint $15 ModeOfPayment $6 

           BusType $12 BookingDate $10 IsStudent $1;

    input PassengerID Name $ Age Gender $ StartPoint $ EndPoint $ 

          TicketPrice Distance_km TravelTime_min ModeOfPayment $ SeatNumber 

          BusType $ IsStudent $ BookingDate $;

    datalines;

1 Rahul 29 Male Hyderabad Warangal 150 140 180 Cash 1 AC N 2025-07-01

2 Sneha 22 Female Hyderabad Vijayawada 300 280 300 UPI 5 Sleeper Y 2025-07-01

3 Anil 35 Male Warangal Guntur 250 250 270 Card 6 AC N 2025-07-02

4 Priya 18 Female Vijayawada Hyderabad 300 280 310 UPI 8 Sleeper Y 2025-07-02

5 John 45 Male Guntur Hyderabad 260 250 260 Cash 9 AC N 2025-07-03

6 Ramya 30 Female Hyderabad Kurnool 220 210 240 UPI 10 Semi-Sleeper Y 2025-07-03

7 Ahmed 40 Male Hyderabad Vizag 600 620 640 Card 12 Sleeper N 2025-07-04

8 Neha 27 Female Vizag Hyderabad 600 620 620 UPI 13 Sleeper Y 2025-07-04

9 Vishal 33 Male Warangal Kurnool 350 360 380 Card 15 Non-AC N 2025-07-05

10 Meena 25 Female Hyderabad Kurnool 220 210 240 UPI 16 AC N 2025-07-05

11 Ravi 50 Male Vijayawada Warangal 200 200 210 Cash 17 AC N 2025-07-06

12 Lakshmi 19 Female Guntur Kurnool 280 300 320 UPI 18 Sleeper Y 2025-07-06

13 Suresh 42 Male Hyderabad Warangal 150 140 180 Cash 19 Non-AC N 2025-07-07

14 Rani 21 Female Kurnool Vizag 650 680 700 Card 20 Sleeper Y 2025-07-07

15 Kishore 36 Male Warangal Vizag 580 600 620 UPI 21 Semi-Sleeper N 2025-07-08

16 Divya 23 Female Hyderabad Guntur 270 260 280 UPI 22 AC Y 2025-07-08

17 Harsha 28 Male Vijayawada Vizag 400 420 430 Cash 23 Sleeper N 2025-07-09

18 Anuja 24 Female Kurnool Hyderabad 220 210 230 Card 24 AC Y 2025-07-09

19 Satish 31 Male Hyderabad Vijayawada 300 280 300 Cash 25 Non-AC N 2025-07-10

20 Jyothi 20 Female Warangal Hyderabad 150 140 160 UPI 26 Sleeper Y 2025-07-10

21 Faheem 27 Male Hyderabad Guntur 270 260 270 UPI 27 Semi-Sleeper N 2025-07-11

22 Preeti 26 Female Guntur Vizag 520 550 570 Card 28 Sleeper Y 2025-07-11

23 Balu 41 Male Vizag Kurnool 620 640 660 UPI 29 AC N 2025-07-12

24 Kavya 22 Female Kurnool Vijayawada 300 310 320 Card 30 Sleeper Y 2025-07-12

25 Manoj 32 Male Hyderabad Warangal 150 140 180 UPI 31 AC N 2025-07-13

26 Deepa 29 Female Hyderabad Guntur 270 260 280 Cash 32 AC Y 2025-07-13

27 Nikhil 38 Male Vijayawada Kurnool 350 370 390 Card 33 Semi-Sleeper N 2025-07-14

28 Shruti 21 Female Guntur Hyderabad 260 250 260 UPI 34 Sleeper Y 2025-07-14

;

run;

proc print;run;

Output:

Obs Name Gender StartPoint EndPoint ModeOfPayment BusType BookingDate IsStudent PassengerID Age TicketPrice Distance_km TravelTime_min SeatNumber
1 Rahul Male Hyderabad Warangal Cash AC 2025-07-01 N 1 29 150 140 180 1
2 Sneha Female Hyderabad Vijayawada UPI Sleeper 2025-07-01 Y 2 22 300 280 300 5
3 Anil Male Warangal Guntur Card AC 2025-07-02 N 3 35 250 250 270 6
4 Priya Female Vijayawada Hyderabad UPI Sleeper 2025-07-02 Y 4 18 300 280 310 8
5 John Male Guntur Hyderabad Cash AC 2025-07-03 N 5 45 260 250 260 9
6 Ramya Female Hyderabad Kurnool UPI Semi-Sleeper 2025-07-03 Y 6 30 220 210 240 10
7 Ahmed Male Hyderabad Vizag Card Sleeper 2025-07-04 N 7 40 600 620 640 12
8 Neha Female Vizag Hyderabad UPI Sleeper 2025-07-04 Y 8 27 600 620 620 13
9 Vishal Male Warangal Kurnool Card Non-AC 2025-07-05 N 9 33 350 360 380 15
10 Meena Female Hyderabad Kurnool UPI AC 2025-07-05 N 10 25 220 210 240 16
11 Ravi Male Vijayawada Warangal Cash AC 2025-07-06 N 11 50 200 200 210 17
12 Lakshmi Female Guntur Kurnool UPI Sleeper 2025-07-06 Y 12 19 280 300 320 18
13 Suresh Male Hyderabad Warangal Cash Non-AC 2025-07-07 N 13 42 150 140 180 19
14 Rani Female Kurnool Vizag Card Sleeper 2025-07-07 Y 14 21 650 680 700 20
15 Kishore Male Warangal Vizag UPI Semi-Sleeper 2025-07-08 N 15 36 580 600 620 21
16 Divya Female Hyderabad Guntur UPI AC 2025-07-08 Y 16 23 270 260 280 22
17 Harsha Male Vijayawada Vizag Cash Sleeper 2025-07-09 N 17 28 400 420 430 23
18 Anuja Female Kurnool Hyderabad Card AC 2025-07-09 Y 18 24 220 210 230 24
19 Satish Male Hyderabad Vijayawada Cash Non-AC 2025-07-10 N 19 31 300 280 300 25
20 Jyothi Female Warangal Hyderabad UPI Sleeper 2025-07-10 Y 20 20 150 140 160 26
21 Faheem Male Hyderabad Guntur UPI Semi-Sleeper 2025-07-11 N 21 27 270 260 270 27
22 Preeti Female Guntur Vizag Card Sleeper 2025-07-11 Y 22 26 520 550 570 28
23 Balu Male Vizag Kurnool UPI AC 2025-07-12 N 23 41 620 640 660 29
24 Kavya Female Kurnool Vijayawada Card Sleeper 2025-07-12 Y 24 22 300 310 320 30
25 Manoj Male Hyderabad Warangal UPI AC 2025-07-13 N 25 32 150 140 180 31
26 Deepa Female Hyderabad Guntur Cash AC 2025-07-13 Y 26 29 270 260 280 32
27 Nikhil Male Vijayawada Kurnool Card Semi-Sleeper 2025-07-14 N 27 38 350 370 390 33
28 Shruti Female Guntur Hyderabad UPI Sleeper 2025-07-14 Y 28 21 260 250 260 34


2.PROC PRINT: To Display Data

title "Complete Bus Travel Dataset";

proc print data=Bus_Travel noobs;

run;

Output:

Complete Bus Travel Dataset

Name Gender StartPoint EndPoint ModeOfPayment BusType BookingDate IsStudent PassengerID Age TicketPrice Distance_km TravelTime_min SeatNumber
Rahul Male Hyderabad Warangal Cash AC 2025-07-01 N 1 29 150 140 180 1
Sneha Female Hyderabad Vijayawada UPI Sleeper 2025-07-01 Y 2 22 300 280 300 5
Anil Male Warangal Guntur Card AC 2025-07-02 N 3 35 250 250 270 6
Priya Female Vijayawada Hyderabad UPI Sleeper 2025-07-02 Y 4 18 300 280 310 8
John Male Guntur Hyderabad Cash AC 2025-07-03 N 5 45 260 250 260 9
Ramya Female Hyderabad Kurnool UPI Semi-Sleeper 2025-07-03 Y 6 30 220 210 240 10
Ahmed Male Hyderabad Vizag Card Sleeper 2025-07-04 N 7 40 600 620 640 12
Neha Female Vizag Hyderabad UPI Sleeper 2025-07-04 Y 8 27 600 620 620 13
Vishal Male Warangal Kurnool Card Non-AC 2025-07-05 N 9 33 350 360 380 15
Meena Female Hyderabad Kurnool UPI AC 2025-07-05 N 10 25 220 210 240 16
Ravi Male Vijayawada Warangal Cash AC 2025-07-06 N 11 50 200 200 210 17
Lakshmi Female Guntur Kurnool UPI Sleeper 2025-07-06 Y 12 19 280 300 320 18
Suresh Male Hyderabad Warangal Cash Non-AC 2025-07-07 N 13 42 150 140 180 19
Rani Female Kurnool Vizag Card Sleeper 2025-07-07 Y 14 21 650 680 700 20
Kishore Male Warangal Vizag UPI Semi-Sleeper 2025-07-08 N 15 36 580 600 620 21
Divya Female Hyderabad Guntur UPI AC 2025-07-08 Y 16 23 270 260 280 22
Harsha Male Vijayawada Vizag Cash Sleeper 2025-07-09 N 17 28 400 420 430 23
Anuja Female Kurnool Hyderabad Card AC 2025-07-09 Y 18 24 220 210 230 24
Satish Male Hyderabad Vijayawada Cash Non-AC 2025-07-10 N 19 31 300 280 300 25
Jyothi Female Warangal Hyderabad UPI Sleeper 2025-07-10 Y 20 20 150 140 160 26
Faheem Male Hyderabad Guntur UPI Semi-Sleeper 2025-07-11 N 21 27 270 260 270 27
Preeti Female Guntur Vizag Card Sleeper 2025-07-11 Y 22 26 520 550 570 28
Balu Male Vizag Kurnool UPI AC 2025-07-12 N 23 41 620 640 660 29
Kavya Female Kurnool Vijayawada Card Sleeper 2025-07-12 Y 24 22 300 310 320 30
Manoj Male Hyderabad Warangal UPI AC 2025-07-13 N 25 32 150 140 180 31
Deepa Female Hyderabad Guntur Cash AC 2025-07-13 Y 26 29 270 260 280 32
Nikhil Male Vijayawada Kurnool Card Semi-Sleeper 2025-07-14 N 27 38 350 370 390 33
Shruti Female Guntur Hyderabad UPI Sleeper 2025-07-14 Y 28 21 260 250 260 34


3.PROC SORT: Sorting by Ticket Price (Descending)

proc sort data=Bus_Travel out=Sorted_Travel;

    by descending TicketPrice;

run;


title "Passengers Sorted by Highest Ticket Price";

proc print data=Sorted_Travel;

run;

Output:

Passengers Sorted by Highest Ticket Price

Obs Name Gender StartPoint EndPoint ModeOfPayment BusType BookingDate IsStudent PassengerID Age TicketPrice Distance_km TravelTime_min SeatNumber
1 Rani Female Kurnool Vizag Card Sleeper 2025-07-07 Y 14 21 650 680 700 20
2 Balu Male Vizag Kurnool UPI AC 2025-07-12 N 23 41 620 640 660 29
3 Ahmed Male Hyderabad Vizag Card Sleeper 2025-07-04 N 7 40 600 620 640 12
4 Neha Female Vizag Hyderabad UPI Sleeper 2025-07-04 Y 8 27 600 620 620 13
5 Kishore Male Warangal Vizag UPI Semi-Sleeper 2025-07-08 N 15 36 580 600 620 21
6 Preeti Female Guntur Vizag Card Sleeper 2025-07-11 Y 22 26 520 550 570 28
7 Harsha Male Vijayawada Vizag Cash Sleeper 2025-07-09 N 17 28 400 420 430 23
8 Vishal Male Warangal Kurnool Card Non-AC 2025-07-05 N 9 33 350 360 380 15
9 Nikhil Male Vijayawada Kurnool Card Semi-Sleeper 2025-07-14 N 27 38 350 370 390 33
10 Sneha Female Hyderabad Vijayawada UPI Sleeper 2025-07-01 Y 2 22 300 280 300 5
11 Priya Female Vijayawada Hyderabad UPI Sleeper 2025-07-02 Y 4 18 300 280 310 8
12 Satish Male Hyderabad Vijayawada Cash Non-AC 2025-07-10 N 19 31 300 280 300 25
13 Kavya Female Kurnool Vijayawada Card Sleeper 2025-07-12 Y 24 22 300 310 320 30
14 Lakshmi Female Guntur Kurnool UPI Sleeper 2025-07-06 Y 12 19 280 300 320 18
15 Divya Female Hyderabad Guntur UPI AC 2025-07-08 Y 16 23 270 260 280 22
16 Faheem Male Hyderabad Guntur UPI Semi-Sleeper 2025-07-11 N 21 27 270 260 270 27
17 Deepa Female Hyderabad Guntur Cash AC 2025-07-13 Y 26 29 270 260 280 32
18 John Male Guntur Hyderabad Cash AC 2025-07-03 N 5 45 260 250 260 9
19 Shruti Female Guntur Hyderabad UPI Sleeper 2025-07-14 Y 28 21 260 250 260 34
20 Anil Male Warangal Guntur Card AC 2025-07-02 N 3 35 250 250 270 6
21 Ramya Female Hyderabad Kurnool UPI Semi-Sleeper 2025-07-03 Y 6 30 220 210 240 10
22 Meena Female Hyderabad Kurnool UPI AC 2025-07-05 N 10 25 220 210 240 16
23 Anuja Female Kurnool Hyderabad Card AC 2025-07-09 Y 18 24 220 210 230 24
24 Ravi Male Vijayawada Warangal Cash AC 2025-07-06 N 11 50 200 200 210 17
25 Rahul Male Hyderabad Warangal Cash AC 2025-07-01 N 1 29 150 140 180 1
26 Suresh Male Hyderabad Warangal Cash Non-AC 2025-07-07 N 13 42 150 140 180 19
27 Jyothi Female Warangal Hyderabad UPI Sleeper 2025-07-10 Y 20 20 150 140 160 26
28 Manoj Male Hyderabad Warangal UPI AC 2025-07-13 N 25 32 150 140 180 31


4.PROC FREQ: Frequency of Gender and BusType

title "Gender Distribution";

proc freq data=Bus_Travel;

    tables Gender;

run;

Output:

Gender Distribution

The FREQ Procedure

Gender Frequency Percent Cumulative
Frequency
Cumulative
Percent
Female 14 50.00 14 50.00
Male 14 50.00 28 100.00


title "Bus Type Distribution";

proc freq data=Bus_Travel;

    tables BusType;

run;

Output:

Bus Type Distribution

The FREQ Procedure

BusType Frequency Percent Cumulative
Frequency
Cumulative
Percent
AC 10 35.71 10 35.71
Non-AC 3 10.71 13 46.43
Semi-Sleeper 4 14.29 17 60.71
Sleeper 11 39.29 28 100.00


5.PROC MEANS: Summary Statistics

title "Summary of Age, Ticket Price, Distance and Travel Time";

proc means data=Bus_Travel n mean min max std;

    var Age TicketPrice Distance_km TravelTime_min;

run;

Output:

Summary of Age, Ticket Price, Distance and Travel Time

The MEANS Procedure

Variable N Mean Minimum Maximum Std Dev
Age
TicketPrice
Distance_km
TravelTime_min
28
28
28
28
29.7857143
328.2142857
329.6428571
350.0000000
18.0000000
150.0000000
140.0000000
160.0000000
50.0000000
650.0000000
680.0000000
700.0000000
8.4606153
155.4456812
168.4236753
164.8793049


6.PROC SQL: Advanced Querying

a.Total Revenue Collected

proc sql;

    title "Total Revenue Collected from All Tickets";

    select sum(TicketPrice) as TotalRevenue from Bus_Travel;

quit;

Output:

Total Revenue Collected from All Tickets

TotalRevenue
9190


b.Average Ticket Price per Bus Type

proc sql;

    title "Average Ticket Price by Bus Type";

    select BusType, avg(TicketPrice) as AvgPrice

    from Bus_Travel

    group by BusType;

quit;

Output:

Average Ticket Price by Bus Type

BusType AvgPrice
AC 261
Non-AC 266.6667
Semi-Sleeper 355
Sleeper 396.3636


c.Number of Students by Destination

proc sql;

    title "Student Count by EndPoint";

    select EndPoint, count(*) as StudentCount

    from Bus_Travel

    where IsStudent = 'Y'

    group by EndPoint;

quit;

Output:

Student Count by EndPoint

EndPoint StudentCount
Guntur 2
Hyderabad 5
Kurnool 2
Vijayawada 2
Vizag 2


7.MACROS in SAS

a.Define a Macro to Get All Passengers from a Specific StartPoint

%macro filter_by_start(start);

    title "Passengers Traveling from &start";

    proc print data=Bus_Travel;

        where StartPoint = "&start";

    run;

%mend;


%filter_by_start(Hyderabad);

Output:

Passengers Traveling from Hyderabad

Obs Name Gender StartPoint EndPoint ModeOfPayment BusType BookingDate IsStudent PassengerID Age TicketPrice Distance_km TravelTime_min SeatNumber
1 Rahul Male Hyderabad Warangal Cash AC 2025-07-01 N 1 29 150 140 180 1
2 Sneha Female Hyderabad Vijayawada UPI Sleeper 2025-07-01 Y 2 22 300 280 300 5
6 Ramya Female Hyderabad Kurnool UPI Semi-Sleeper 2025-07-03 Y 6 30 220 210 240 10
7 Ahmed Male Hyderabad Vizag Card Sleeper 2025-07-04 N 7 40 600 620 640 12
10 Meena Female Hyderabad Kurnool UPI AC 2025-07-05 N 10 25 220 210 240 16
13 Suresh Male Hyderabad Warangal Cash Non-AC 2025-07-07 N 13 42 150 140 180 19
16 Divya Female Hyderabad Guntur UPI AC 2025-07-08 Y 16 23 270 260 280 22
19 Satish Male Hyderabad Vijayawada Cash Non-AC 2025-07-10 N 19 31 300 280 300 25
21 Faheem Male Hyderabad Guntur UPI Semi-Sleeper 2025-07-11 N 21 27 270 260 270 27
25 Manoj Male Hyderabad Warangal UPI AC 2025-07-13 N 25 32 150 140 180 31
26 Deepa Female Hyderabad Guntur Cash AC 2025-07-13 Y 26 29 270 260 280 32


%filter_by_start(Warangal);

Output:

Passengers Traveling from Warangal

Obs Name Gender StartPoint EndPoint ModeOfPayment BusType BookingDate IsStudent PassengerID Age TicketPrice Distance_km TravelTime_min SeatNumber
3 Anil Male Warangal Guntur Card AC 2025-07-02 N 3 35 250 250 270 6
9 Vishal Male Warangal Kurnool Card Non-AC 2025-07-05 N 9 33 350 360 380 15
15 Kishore Male Warangal Vizag UPI Semi-Sleeper 2025-07-08 N 15 36 580 600 620 21
20 Jyothi Female Warangal Hyderabad UPI Sleeper 2025-07-10 Y 20 20 150 140 160 26


b.Macro to Calculate Total Revenue for a Bus Type

%macro bus_type_revenue(type);

    proc sql;

        title "Total Revenue for Bus Type: &type";

        select BusType, sum(TicketPrice) as Revenue

        from Bus_Travel

        where BusType = "&type"

        group by BusType;

    quit;

%mend;


%bus_type_revenue(AC);

Output:

Total Revenue for Bus Type: AC

BusType Revenue
AC 2610


%bus_type_revenue(Sleeper);

Output:
Total Revenue for Bus Type: Sleeper

BusType Revenue
Sleeper 4360






To Visit My Previous First. Last. Statements:Click Here
To Visit My Previous Set Where Statements:Click Here
To Visit My Previous Online Gaming Dataset:Click Here
To Visit My Previous Length Statement Using In Many Ways:Click Here





--->PLEASE FOLLOW OUR BLOG FOR MORE INFORMATION.
--->PLEASE DO COMMENTS AND SHARE OUR BLOG.

PLEASE FOLLOW OUR TELEGRAM CHANNEL CLICK HERE

PLEASE FOLLOW OUR FACEBOOK PAGE  CLICK HERE

PLEASE FOLLOW OUR INSTAGRAM PAGE CLICK HERE


Comments