Tuesday, 25 November 2025

320.OCEAN SHIP FUEL EFFICIENCY AND VOYAGE ANALYSIS USING PROC SQL | PROC MEANS | PROC CORR | PROC UNIVARIATE | PROC SGPLOT WITH INTCK | INTNX AND MACRO-BASED GROUPING

OCEAN SHIP FUEL EFFICIENCY AND VOYAGE ANALYSIS USING PROC SQL | PROC MEANS | PROC CORR | PROC UNIVARIATE | PROC SGPLOT WITH INTCK | INTNX AND MACRO-BASED GROUPING


STEP 1: CREATE BASE DATASET WITH SHIP DETAILS + DATES

options nocenter;

data work.ships_raw;

    length Ship_Name $30 Type $20;

    infile datalines dlm='|' dsd;

    input Ship_ID Ship_Name :$30. Type :$20. Cargo_Capacity /* in metric tons */

          Crew_Size Distance_Travelled  /* in nautical miles for this voyage */

          Fuel_Consumption    /* in metric tons for this voyage */ Departure_Date :date9.

          Arrival_Date   :date9.;    

    format Departure_Date Arrival_Date date9.;         

    datalines;

1|Arctic Voyager|Container|18000|24|12000|950|01JAN2025|25JAN2025

2|Pacific Titan|Oil Tanker|300000|28|9000|1100|15FEB2025|05MAR2025

3|Indian Star|Bulk Carrier|85000|22|7000|650|20JAN2025|10FEB2025

4|Atlantic Breeze|Container|15000|20|5000|420|10MAR2025|22MAR2025

5|Southern Cross|LNG Carrier|140000|30|11000|980|05APR2025|28APR2025

6|Northern Light|Research Vessel|8000|40|3500|260|18JAN2025|05FEB2025

7|Ocean Spirit|Car Carrier|20000|26|8000|700|25FEB2025|18MAR2025

8|Cargo King|Bulk Carrier|95000|24|9500|900|02MAR2025|27MAR2025

9|Eastern Pearl|Container|13000|18|4300|380|12APR2025|24APR2025

10|Western Horizon|Oil Tanker|280000|27|10000|1250|01MAY2025|20MAY2025

11|Blue Dolphin|LNG Carrier|135000|29|8200|770|15MAR2025|05APR2025

12|Red Mariner|Bulk Carrier|90000|23|7600|820|08MAY2025|30MAY2025

13|Silver Wave|Research Vessel|7500|38|4200|310|28FEB2025|20MAR2025

14|Golden Anchor|Car Carrier|22000|25|6700|560|10APR2025|30APR2025

;

run;

proc print data=work.ships_raw;

run;

OUTPUT:

ObsShip_NameTypeShip_IDCargo_CapacityCrew_SizeDistance_TravelledFuel_ConsumptionDeparture_DateArrival_Date
1Arctic VoyagerContainer118000241200095001JAN202525JAN2025
2Pacific TitanOil Tanker2300000289000110015FEB202505MAR2025
3Indian StarBulk Carrier38500022700065020JAN202510FEB2025
4Atlantic BreezeContainer41500020500042010MAR202522MAR2025
5Southern CrossLNG Carrier5140000301100098005APR202528APR2025
6Northern LightResearch Vessel6800040350026018JAN202505FEB2025
7Ocean SpiritCar Carrier72000026800070025FEB202518MAR2025
8Cargo KingBulk Carrier89500024950090002MAR202527MAR2025
9Eastern PearlContainer91300018430038012APR202524APR2025
10Western HorizonOil Tanker102800002710000125001MAY202520MAY2025
11Blue DolphinLNG Carrier1113500029820077015MAR202505APR2025
12Red MarinerBulk Carrier129000023760082008MAY202530MAY2025
13Silver WaveResearch Vessel13750038420031028FEB202520MAR2025
14Golden AnchorCar Carrier142200025670056010APR202530APR2025


STEP 2: ADD DATE-DERIVED VARIABLES USING INTCK & INTNX

data work.ships_dates;

    set work.ships_raw;


    /* Voyage duration in days using INTCK */

    Voyage_Days = intck('day', Departure_Date, Arrival_Date);


    /* Schedule next maintenance 6 months after departure using INTNX */

    Next_Maintenance = intnx('month', Departure_Date, 6, 'same');


    /* Create a year-month bucket for reporting (beginning of month) */

    Year_Month = intnx('month', Departure_Date, 0, 'beginning');


    /* Different display formats for date variables */

    format Next_Maintenance yymmdd10.

                 Year_Month       monyy7.

                 Departure_Date   date9.

                 Arrival_Date     ddmmyy10.;

run;

proc print data=work.ships_dates noobs;

    title "Ships with Date-Derived Variables (INTCK and INTNX)";

run;

OUTPUT:

Ships with Date-Derived Variables (INTCK and INTNX)

Ship_NameTypeShip_IDCargo_CapacityCrew_SizeDistance_TravelledFuel_ConsumptionDeparture_DateArrival_DateVoyage_DaysNext_MaintenanceYear_Month
Arctic VoyagerContainer118000241200095001JAN202525/01/2025242025-07-01JAN2025
Pacific TitanOil Tanker2300000289000110015FEB202505/03/2025182025-08-15FEB2025
Indian StarBulk Carrier38500022700065020JAN202510/02/2025212025-07-20JAN2025
Atlantic BreezeContainer41500020500042010MAR202522/03/2025122025-09-10MAR2025
Southern CrossLNG Carrier5140000301100098005APR202528/04/2025232025-10-05APR2025
Northern LightResearch Vessel6800040350026018JAN202505/02/2025182025-07-18JAN2025
Ocean SpiritCar Carrier72000026800070025FEB202518/03/2025212025-08-25FEB2025
Cargo KingBulk Carrier89500024950090002MAR202527/03/2025252025-09-02MAR2025
Eastern PearlContainer91300018430038012APR202524/04/2025122025-10-12APR2025
Western HorizonOil Tanker102800002710000125001MAY202520/05/2025192025-11-01MAY2025
Blue DolphinLNG Carrier1113500029820077015MAR202505/04/2025212025-09-15MAR2025
Red MarinerBulk Carrier129000023760082008MAY202530/05/2025222025-11-08MAY2025
Silver WaveResearch Vessel13750038420031028FEB202520/03/2025202025-08-28FEB2025
Golden AnchorCar Carrier142200025670056010APR202530/04/2025202025-10-10APR2025

STEP 3: USE PROC SQL TO BUILD ANALYSIS DATASET

proc sql;

    create table work.ships_analysis as

    select Ship_ID, Ship_Name, Type, Cargo_Capacity, Crew_Size, Distance_Travelled,

           Fuel_Consumption, Departure_Date, Arrival_Date, Voyage_Days,

           Next_Maintenance, Year_Month,

           /* Fuel efficiency: nautical miles per ton of fuel */

           (Distance_Travelled / Fuel_Consumption) as Fuel_Efficiency

                label = "Nm per Ton of Fuel",

           /* Another ratio: distance per ton of capacity */

           (Distance_Travelled / Cargo_Capacity) as Dist_per_Capacity

                label = "Nm per Ton of Capacity"

    from work.ships_dates;

quit;

proc print data=work.ships_analysis (obs=10);

    title "Sample of Ships Analysis Dataset";

run;

OUTPUT:

Sample of Ships Analysis Dataset

ObsShip_IDShip_NameTypeCargo_CapacityCrew_SizeDistance_TravelledFuel_ConsumptionDeparture_DateArrival_DateVoyage_DaysNext_MaintenanceYear_MonthFuel_EfficiencyDist_per_Capacity
11Arctic VoyagerContainer18000241200095001JAN202525/01/2025242025-07-01JAN202512.63160.66667
22Pacific TitanOil Tanker300000289000110015FEB202505/03/2025182025-08-15FEB20258.18180.03000
33Indian StarBulk Carrier8500022700065020JAN202510/02/2025212025-07-20JAN202510.76920.08235
44Atlantic BreezeContainer1500020500042010MAR202522/03/2025122025-09-10MAR202511.90480.33333
55Southern CrossLNG Carrier140000301100098005APR202528/04/2025232025-10-05APR202511.22450.07857
66Northern LightResearch Vessel800040350026018JAN202505/02/2025182025-07-18JAN202513.46150.43750
77Ocean SpiritCar Carrier2000026800070025FEB202518/03/2025212025-08-25FEB202511.42860.40000
88Cargo KingBulk Carrier9500024950090002MAR202527/03/2025252025-09-02MAR202510.55560.10000
99Eastern PearlContainer1300018430038012APR202524/04/2025122025-10-12APR202511.31580.33077
1010Western HorizonOil Tanker2800002710000125001MAY202520/05/2025192025-11-01MAY20258.00000.03571

STEP 4: MACRO FOR FUEL-EFFICIENCY GROUPING

%macro fuel_group(in=work.ships_analysis, out=work.ships_fe_grouped);


    data &out.;

        set &in.;

        length Fuel_Group $20;


        if Fuel_Efficiency >= 18 then Fuel_Group = "Highly_Efficient";

        else if Fuel_Efficiency >= 15 then Fuel_Group = "Moderate";

        else Fuel_Group = "Low_Efficiency";

    run;

    proc print data= &out.;

    run;

%mend fuel_group;


%fuel_group();

OUTPUT:

ObsShip_IDShip_NameTypeCargo_CapacityCrew_SizeDistance_TravelledFuel_ConsumptionDeparture_DateArrival_DateVoyage_DaysNext_MaintenanceYear_MonthFuel_EfficiencyDist_per_CapacityFuel_Group
11Arctic VoyagerContainer18000241200095001JAN202525/01/2025242025-07-01JAN202512.63160.66667Low_Efficiency
22Pacific TitanOil Tanker300000289000110015FEB202505/03/2025182025-08-15FEB20258.18180.03000Low_Efficiency
33Indian StarBulk Carrier8500022700065020JAN202510/02/2025212025-07-20JAN202510.76920.08235Low_Efficiency
44Atlantic BreezeContainer1500020500042010MAR202522/03/2025122025-09-10MAR202511.90480.33333Low_Efficiency
55Southern CrossLNG Carrier140000301100098005APR202528/04/2025232025-10-05APR202511.22450.07857Low_Efficiency
66Northern LightResearch Vessel800040350026018JAN202505/02/2025182025-07-18JAN202513.46150.43750Low_Efficiency
77Ocean SpiritCar Carrier2000026800070025FEB202518/03/2025212025-08-25FEB202511.42860.40000Low_Efficiency
88Cargo KingBulk Carrier9500024950090002MAR202527/03/2025252025-09-02MAR202510.55560.10000Low_Efficiency
99Eastern PearlContainer1300018430038012APR202524/04/2025122025-10-12APR202511.31580.33077Low_Efficiency
1010Western HorizonOil Tanker2800002710000125001MAY202520/05/2025192025-11-01MAY20258.00000.03571Low_Efficiency
1111Blue DolphinLNG Carrier13500029820077015MAR202505/04/2025212025-09-15MAR202510.64940.06074Low_Efficiency
1212Red MarinerBulk Carrier9000023760082008MAY202530/05/2025222025-11-08MAY20259.26830.08444Low_Efficiency
1313Silver WaveResearch Vessel750038420031028FEB202520/03/2025202025-08-28FEB202513.54840.56000Low_Efficiency
1414Golden AnchorCar Carrier2200025670056010APR202530/04/2025202025-10-10APR202511.96430.30455Low_Efficiency


/* Quick check */

proc freq data=work.ships_fe_grouped;

    tables Fuel_Group*Type / nocum nopercent;

    title "Fuel Efficiency Group by Ship Type";

run;

OUTPUT:

Fuel Efficiency Group by Ship Type

The FREQ Procedure

Frequency
Row Pct
Col Pct
Table of Fuel_Group by Type
Fuel_GroupType
Bulk CarrierCar CarrierContainerLNG CarrierOil TankerResearch VesselTotal
Low_Efficiency
3
21.43
100.00
2
14.29
100.00
3
21.43
100.00
2
14.29
100.00
2
14.29
100.00
2
14.29
100.00
14
 
 
Total
3
2
3
2
2
2
14

STEP 5: PROC MEANS – SUMMARY STATISTICS

proc means data=work.ships_fe_grouped mean std min max maxdec=2;

    class Type Fuel_Group;

    var Cargo_Capacity Crew_Size Distance_Travelled Fuel_Consumption Fuel_Efficiency;

    title "Descriptive Statistics by Ship Type and Fuel Efficiency Group";

run;

OUTPUT:

Descriptive Statistics by Ship Type and Fuel Efficiency Group

The MEANS Procedure

TypeFuel_GroupN ObsVariableLabelMeanStd DevMinimumMaximum
Bulk CarrierLow_Efficiency3
Cargo_Capacity
Crew_Size
Distance_Travelled
Fuel_Consumption
Fuel_Efficiency
 
 
 
 
Nm per Ton of Fuel
90000.00
23.00
8033.33
790.00
10.20
5000.00
1.00
1305.12
127.67
0.81
85000.00
22.00
7000.00
650.00
9.27
95000.00
24.00
9500.00
900.00
10.77
Car CarrierLow_Efficiency2
Cargo_Capacity
Crew_Size
Distance_Travelled
Fuel_Consumption
Fuel_Efficiency
 
 
 
 
Nm per Ton of Fuel
21000.00
25.50
7350.00
630.00
11.70
1414.21
0.71
919.24
98.99
0.38
20000.00
25.00
6700.00
560.00
11.43
22000.00
26.00
8000.00
700.00
11.96
ContainerLow_Efficiency3
Cargo_Capacity
Crew_Size
Distance_Travelled
Fuel_Consumption
Fuel_Efficiency
 
 
 
 
Nm per Ton of Fuel
15333.33
20.67
7100.00
583.33
11.95
2516.61
3.06
4257.93
318.17
0.66
13000.00
18.00
4300.00
380.00
11.32
18000.00
24.00
12000.00
950.00
12.63
LNG CarrierLow_Efficiency2
Cargo_Capacity
Crew_Size
Distance_Travelled
Fuel_Consumption
Fuel_Efficiency
 
 
 
 
Nm per Ton of Fuel
137500.00
29.50
9600.00
875.00
10.94
3535.53
0.71
1979.90
148.49
0.41
135000.00
29.00
8200.00
770.00
10.65
140000.00
30.00
11000.00
980.00
11.22
Oil TankerLow_Efficiency2
Cargo_Capacity
Crew_Size
Distance_Travelled
Fuel_Consumption
Fuel_Efficiency
 
 
 
 
Nm per Ton of Fuel
290000.00
27.50
9500.00
1175.00
8.09
14142.14
0.71
707.11
106.07
0.13
280000.00
27.00
9000.00
1100.00
8.00
300000.00
28.00
10000.00
1250.00
8.18
Research VesselLow_Efficiency2
Cargo_Capacity
Crew_Size
Distance_Travelled
Fuel_Consumption
Fuel_Efficiency
 
 
 
 
Nm per Ton of Fuel
7750.00
39.00
3850.00
285.00
13.50
353.55
1.41
494.97
35.36
0.06
7500.00
38.00
3500.00
260.00
13.46
8000.00
40.00
4200.00
310.00
13.55

STEP 6: PROC CORR – RELATIONSHIPS BETWEEN NUMERIC VARIABLES

proc corr data=work.ships_fe_grouped plots=none;

    var Cargo_Capacity Crew_Size Distance_Travelled Fuel_Consumption Fuel_Efficiency;

    title "Correlation between Capacity, Distance, Fuel, Crew, and Fuel Efficiency";

run;

OUTPUT:

Correlation between Capacity, Distance, Fuel, Crew, and Fuel Efficiency

The CORR Procedure

5 Variables:Cargo_Capacity Crew_Size Distance_Travelled Fuel_Consumption Fuel_Efficiency
Simple Statistics
VariableNMeanStd DevSumMinimumMaximumLabel
Cargo_Capacity14877509786012285007500300000 
Crew_Size1426.714296.18221374.0000018.0000040.00000 
Distance_Travelled1475712630106000350012000 
Fuel_Consumption14717.85714304.6859310050260.000001250 
Fuel_Efficiency1411.064551.69964154.903658.0000013.54839Nm per Ton of Fuel
Pearson Correlation Coefficients, N = 14
Prob > |r| under H0: Rho=0
 Cargo_CapacityCrew_SizeDistance_TravelledFuel_ConsumptionFuel_Efficiency
Cargo_Capacity
 
1.00000
 
0.01494
0.9596
0.52020
0.0565
0.80718
0.0005
-0.87072
<.0001
Crew_Size
 
0.01494
0.9596
1.00000
 
-0.21104
0.4689
-0.20495
0.4821
0.36919
0.1939
Distance_Travelled
 
0.52020
0.0565
-0.21104
0.4689
1.00000
 
0.90520
<.0001
-0.46355
0.0950
Fuel_Consumption
 
0.80718
0.0005
-0.20495
0.4821
0.90520
<.0001
1.00000
 
-0.77222
0.0012
Fuel_Efficiency
Nm per Ton of Fuel
-0.87072
<.0001
0.36919
0.1939
-0.46355
0.0950
-0.77222
0.0012
1.00000
 

STEP 7: PROC UNIVARIATE – DISTRIBUTION OF FUEL EFFICIENCY

proc univariate data=work.ships_fe_grouped normal;

    var Fuel_Efficiency;

    histogram Fuel_Efficiency;

    qqplot Fuel_Efficiency / normal(mu=est sigma=est);

    title "Distribution of Fuel Efficiency Across Ships";

run;

OUTPUT:

Distribution of Fuel Efficiency Across Ships

The UNIVARIATE Procedure

Variable: Fuel_Efficiency (Nm per Ton of Fuel)

Moments
N14Sum Weights14
Mean11.0645465Sum Observations154.903651
Std Deviation1.69964031Variance2.88877717
Skewness-0.4464886Kurtosis-0.2326239
Uncorrected SS1751.49275Corrected SS37.5541032
Coeff Variation15.3611385Std Error Mean0.45424798
Basic Statistical Measures
LocationVariability
Mean11.06455Std Deviation1.69964
Median11.27014Variance2.88878
Mode.Range5.54839
  Interquartile Range1.40873
Tests for Location: Mu0=0
TestStatisticp Value
Student's tt24.35794Pr > |t|<.0001
SignM7Pr >= |M|0.0001
Signed RankS52.5Pr >= |S|0.0001
Tests for Normality
TestStatisticp Value
Shapiro-WilkW0.943332Pr < W0.4627
Kolmogorov-SmirnovD0.168005Pr > D>0.1500
Cramer-von MisesW-Sq0.047555Pr > W-Sq>0.2500
Anderson-DarlingA-Sq0.317834Pr > A-Sq>0.2500
Quantiles (Definition 5)
LevelQuantile
100% Max13.54839
99%13.54839
95%13.54839
90%13.46154
75% Q311.96429
50% Median11.27014
25% Q110.55556
10%8.18182
5%8.00000
1%8.00000
0% Min8.00000
Extreme Observations
LowestHighest
ValueObsValueObs
8.000001011.90484
8.18182211.964314
9.268291212.63161
10.55556813.46156
10.649351113.548413

Distribution of Fuel Efficiency Across Ships

The UNIVARIATE Procedure

Histogram for Fuel_Efficiency


Distribution of Fuel Efficiency Across Ships

The UNIVARIATE Procedure

Q-Q plot for Fuel_Efficiency

STEP 8: PROC SGPLOT – VISUALIZATIONS

/* Scatter plot – Distance vs Fuel Consumption by Type */

proc sgplot data=work.ships_fe_grouped;

    scatter x=Distance_Travelled y=Fuel_Consumption / group=Type;

    xaxis label="Distance Travelled (Nautical Miles)";

    yaxis label="Fuel Consumption (Metric Tons)";

    title "Scatter Plot of Distance vs Fuel Consumption by Ship Type";

run;

OUTPUT:

The SGPlot Procedure


/* Bar chart – Average Fuel Efficiency by Type and Group */

proc sgplot data=work.ships_fe_grouped;

    vbar Type / response=Fuel_Efficiency stat=mean

                group=Fuel_Group groupdisplay=cluster;

    yaxis label="Mean Fuel Efficiency (Nm per Ton of Fuel)";

    title "Mean Fuel Efficiency by Ship Type and Fuel Group";

run;

OUTPUT:
The SGPlot Procedure





To Visit My Previous Different Tablets Market Analysis Dataset:Click Here
To Visit My Previous Self Description Analysis Dataset:Click Here
To Visit My Previous Birds Of India Dataset:Click Here
To Visit My Previous Ganesh Mandaps In India Dataset:Click Here  



Follow Us On : 


 


--- FOLLOW OUR BLOG FOR MORE INFORMATION.

--->PLEASE DO COMMENTS AND SHARE OUR BLOG.




No comments:

Post a Comment