329.How Can SAS Analyze Agricultural Machinery Performance Using DATA Step, PROC SQL, and Smart Date Calculations?

How Can SAS Analyze Agricultural Machinery Performance Using DATA Step, PROC SQL, and Smart Date Calculations?

options nocenter;

STEP 1: CREATE BASE DATASET WITH 12 AGRICULTURAL MACHINES

data agri_machines_raw;

    length Machine_Name $30 Brand $20 Fuel_Type $10 Maintenance_Level $10;

    input Machine_Name $ Brand $ Fuel_Type $ Efficiency Cost Usage_Hours   

         Purchase_Date_char:$10. Last_Service_char:$10. Maintenance_Level $;

    datalines;

Tractor_MidRange JohnDeere Diesel 85 1200000 2200 15JAN2018 10JAN2024 High

Tractor_Compact Mahindra Diesel 78 800000 1800 20JUN2019 15DEC2023 Medium

Combine_Harvester NewHolland Diesel 90 3500000 2500 01APR2017 20NOV2023 High

Rotavator_Heavy Kubota Diesel 82 450000 1600 10SEP2020 05FEB2024 Medium

Seed_Drill_Pneumatic Mahindra Diesel 88 600000 1900 25NOV2020 01JAN2024 Medium

Boom_Sprayer_Trailed CLAAS Diesel 80 1100000 2000 12AUG2018 18OCT2023 Medium

Baler_Round JohnDeere Diesel 87 1500000 2100 05MAY2016 22DEC2023 High

Thresher_Stationary LocalBrand Electric 75 300000 1400 30JAN2021 27JAN2024 Medium

Power_Tiller_Compact VST Diesel 70 250000 1300 18JUL2022 03MAR2024 Low

Rice_Transplanter Kubota Diesel 83 900000 1750 09JUN2019 28NOV2023 Medium

Sugarcane_Harvester CaseIH Diesel 92 5500000 2700 21FEB2016 15SEP2023 High

Potato_Digger_Trailed LocalBrand Petrol 68 350000 1200 11OCT2022 10FEB2024 Low

;

run;

proc print data=agri_machines_raw;

run;

OUTPUT:

ObsMachine_NameBrandFuel_TypeMaintenance_LevelEfficiencyCostUsage_HoursPurchase_Date_charLast_Service_char
1Tractor_MidRangeJohnDeereDieselHigh851200000220015JAN201810JAN2024
2Tractor_CompactMahindraDieselMedium78800000180020JUN201915DEC2023
3Combine_HarvesterNewHollandDieselHigh903500000250001APR201720NOV2023
4Rotavator_HeavyKubotaDieselMedium82450000160010SEP202005FEB2024
5Seed_Drill_PneumaticMahindraDieselMedium88600000190025NOV202001JAN2024
6Boom_Sprayer_TrailedCLAASDieselMedium801100000200012AUG201818OCT2023
7Baler_RoundJohnDeereDieselHigh871500000210005MAY201622DEC2023
8Thresher_StationaryLocalBrandElectricMedium75300000140030JAN202127JAN2024
9Power_Tiller_CompactVSTDieselLow70250000130018JUL202203MAR2024
10Rice_TransplanterKubotaDieselMedium83900000175009JUN201928NOV2023
11Sugarcane_HarvesterCaseIHDieselHigh925500000270021FEB201615SEP2023
12Potato_Digger_TrailedLocalBrandPetrolLow68350000120011OCT202210FEB2024


STEP 2: USE PROC SQL TO CONVERT CHAR DATES TO SAS DATES AND KEEP MAINTENANCE_LEVEL

proc sql;

    create table agri_machines as

    select  Machine_Name,Brand,Fuel_Type,Efficiency,Cost,Usage_Hours,

            input(Purchase_Date_char, date9.) as Purchase_Date format=date9.,

            input(Last_Service_char , date9.) as Last_Service_Date format=date9.,

            Maintenance_Level

    from agri_machines_raw;

quit;

proc print data=agri_machines;

run;

OUTPUT:

ObsMachine_NameBrandFuel_TypeEfficiencyCostUsage_HoursPurchase_DateLast_Service_DateMaintenance_Level
1Tractor_MidRangeJohnDeereDiesel851200000220015JAN201810JAN2024High
2Tractor_CompactMahindraDiesel78800000180020JUN201915DEC2023Medium
3Combine_HarvesterNewHollandDiesel903500000250001APR201720NOV2023High
4Rotavator_HeavyKubotaDiesel82450000160010SEP202005FEB2024Medium
5Seed_Drill_PneumaticMahindraDiesel88600000190025NOV202001JAN2024Medium
6Boom_Sprayer_TrailedCLAASDiesel801100000200012AUG201818OCT2023Medium
7Baler_RoundJohnDeereDiesel871500000210005MAY201622DEC2023High
8Thresher_StationaryLocalBrandElectric75300000140030JAN202127JAN2024Medium
9Power_Tiller_CompactVSTDiesel70250000130018JUL202203MAR2024Low
10Rice_TransplanterKubotaDiesel83900000175009JUN201928NOV2023Medium
11Sugarcane_HarvesterCaseIHDiesel925500000270021FEB201615SEP2023High
12Potato_Digger_TrailedLocalBrandPetrol68350000120011OCT202210FEB2024Low


STEP 3: DEFINE MACROS FOR PERFORMANCE GRADING AND SERVICE SCHEDULING USING INTCK / INTNX

/* Macro to grade performance based on efficiency and usage */

%macro perf_grade(efficiency, usage);

    length Performance_Grade $1;

    if &efficiency >= 90 and &usage >= 2200 then Performance_Grade = 'A';

    else if &efficiency >= 80 and &usage >= 1700 then Performance_Grade = 'B';

    else if &efficiency >= 70 and &usage >= 1300 then Performance_Grade = 'C';

    else Performance_Grade = 'D';

%mend;


/* Macro to compute date-based metrics using INTCK and INTNX */

%macro service_schedule(purchase, last_service);

    /* Age in years from purchase date to today */

    Age_Years = intck('year', &purchase, today());


    /* Months since last service */

    Months_Since_Service = intck('month', &last_service, today());


    /* Next service due 6 months after last service */

    Next_Service_Due = intnx('month', &last_service, 6, 'same');


    format Next_Service_Due date9.;

%mend;

STEP 4: CREATE FINAL ANALYTICAL DATASET WITH MACROS

data agri_machines_final;

    set agri_machines;


    /* Call macro for performance grading */

    %perf_grade(Efficiency, Usage_Hours);


    /* Call macro for date-based calculations */

    %service_schedule(Purchase_Date, Last_Service_Date);


    /* Simple numeric coding for Maintenance_Level */

    length Maint_Level_Code 8;

    if Maintenance_Level = '' then do;

        /* Derive level based on Usage_Hours as example rule */

        if Usage_Hours >= 2300 then Maintenance_Level = 'High';

        else if Usage_Hours >= 1700 then Maintenance_Level = 'Medium';

        else Maintenance_Level = 'Low';

    end;


    if Maintenance_Level = 'High'   then Maint_Level_Code = 3;

    else if Maintenance_Level = 'Medium' then Maint_Level_Code = 2;

    else if Maintenance_Level = 'Low'    then Maint_Level_Code = 1;

run;

proc print data=agri_machines_final;

run;

OUTPUT:

ObsMachine_NameBrandFuel_TypeEfficiencyCostUsage_HoursPurchase_DateLast_Service_DateMaintenance_LevelPerformance_GradeAge_YearsMonths_Since_ServiceNext_Service_DueMaint_Level_Code
1Tractor_MidRangeJohnDeereDiesel851200000220015JAN201810JAN2024HighB72310JUL20243
2Tractor_CompactMahindraDiesel78800000180020JUN201915DEC2023MediumC62415JUN20242
3Combine_HarvesterNewHollandDiesel903500000250001APR201720NOV2023HighA82520MAY20243
4Rotavator_HeavyKubotaDiesel82450000160010SEP202005FEB2024MediumC52205AUG20242
5Seed_Drill_PneumaticMahindraDiesel88600000190025NOV202001JAN2024MediumB52301JUL20242
6Boom_Sprayer_TrailedCLAASDiesel801100000200012AUG201818OCT2023MediumB72618APR20242
7Baler_RoundJohnDeereDiesel871500000210005MAY201622DEC2023HighB92422JUN20243
8Thresher_StationaryLocalBrandElectric75300000140030JAN202127JAN2024MediumC42327JUL20242
9Power_Tiller_CompactVSTDiesel70250000130018JUL202203MAR2024LowC32103SEP20241
10Rice_TransplanterKubotaDiesel83900000175009JUN201928NOV2023MediumB62528MAY20242
11Sugarcane_HarvesterCaseIHDiesel925500000270021FEB201615SEP2023HighA92715MAR20243
12Potato_Digger_TrailedLocalBrandPetrol68350000120011OCT202210FEB2024LowD32210AUG20241


STEP 5: PROC MEANS – SUMMARY STATISTICS

proc means data=agri_machines_final n mean std min max;

    var Efficiency Cost Usage_Hours Age_Years Months_Since_Service;

    class Fuel_Type;

run;

OUTPUT:

The MEANS Procedure

Fuel_TypeN ObsVariableNMeanStd DevMinimumMaximum
Diesel10
Efficiency
Cost
Usage_Hours
Age_Years
Months_Since_Service
10
10
10
10
10
83.5000000
1580000.00
1985.00
6.5000000
24.0000000
6.4678693
1650286.17
415.0301194
1.9002924
1.8257419
70.0000000
250000.00
1300.00
3.0000000
21.0000000
92.0000000
5500000.00
2700.00
9.0000000
27.0000000
Electric1
Efficiency
Cost
Usage_Hours
Age_Years
Months_Since_Service
1
1
1
1
1
75.0000000
300000.00
1400.00
4.0000000
23.0000000
.
.
.
.
.
75.0000000
300000.00
1400.00
4.0000000
23.0000000
75.0000000
300000.00
1400.00
4.0000000
23.0000000
Petrol1
Efficiency
Cost
Usage_Hours
Age_Years
Months_Since_Service
1
1
1
1
1
68.0000000
350000.00
1200.00
3.0000000
22.0000000
.
.
.
.
.
68.0000000
350000.00
1200.00
3.0000000
22.0000000
68.0000000
350000.00
1200.00
3.0000000
22.0000000

STEP 6: PROC FREQ – CATEGORICAL DISTRIBUTIONS

proc freq data=agri_machines_final;

    tables Brand Fuel_Type Maintenance_Level Performance_Grade / nocum nopercent;

run;

OUTPUT:

The FREQ Procedure

BrandFrequency
CLAAS1
CaseIH1
JohnDeere2
Kubota2
LocalBrand2
Mahindra2
NewHolland1
VST1
Fuel_TypeFrequency
Diesel10
Electric1
Petrol1
Maintenance_LevelFrequency
High4
Low2
Medium6
Performance_GradeFrequency
A2
B5
C4
D1

STEP 7: PROC CORR – CORRELATION BETWEEN NUMERIC VARIABLES

proc corr data=agri_machines_final nosimple;

    var Efficiency Cost Usage_Hours Age_Years Maint_Level_Code;

run;

OUTPUT:

The CORR Procedure

5 Variables:Efficiency Cost Usage_Hours Age_Years Maint_Level_Code
Pearson Correlation Coefficients, N = 12
Prob > |r| under H0: Rho=0
 EfficiencyCostUsage_HoursAge_YearsMaint_Level_Code
Efficiency
1.00000
 
0.69319
0.0124
0.90328
<.0001
0.84375
0.0006
0.87939
0.0002
Cost
0.69319
0.0124
1.00000
 
0.85796
0.0004
0.74394
0.0055
0.67402
0.0162
Usage_Hours
0.90328
<.0001
0.85796
0.0004
1.00000
 
0.92227
<.0001
0.89245
<.0001
Age_Years
0.84375
0.0006
0.74394
0.0055
0.92227
<.0001
1.00000
 
0.90951
<.0001
Maint_Level_Code
0.87939
0.0002
0.67402
0.0162
0.89245
<.0001
0.90951
<.0001
1.00000
 

STEP 8: PROC SQL – EXAMPLE QUERY FOR HIGH PERFORMANCE MACHINES

proc sql;

    select Machine_Name,Brand,Fuel_Type,Efficiency,Usage_Hours,Performance_Grade,

           Age_Years,Months_Since_Service,Next_Service_Due

    from agri_machines_final

    where Performance_Grade in ('A', 'B')

    order by Efficiency desc, Usage_Hours desc;

quit;

OUTPUT:
Machine_NameBrandFuel_TypeEfficiencyUsage_HoursPerformance_GradeAge_YearsMonths_Since_ServiceNext_Service_Due
Sugarcane_HarvesterCaseIHDiesel922700A92715MAR2024
Combine_HarvesterNewHollandDiesel902500A82520MAY2024
Seed_Drill_PneumaticMahindraDiesel881900B52301JUL2024
Baler_RoundJohnDeereDiesel872100B92422JUN2024
Tractor_MidRangeJohnDeereDiesel852200B72310JUL2024
Rice_TransplanterKubotaDiesel831750B62528MAY2024
Boom_Sprayer_TrailedCLAASDiesel802000B72618APR2024





To Visit My Previous Original Data Management Dataset:Click Here
To Visit My Previous Cricket World Cup Dataset:Click Here
To Visit My Previous Home Tour Dataset:Click Here
To Visit My Previous Real-World Dal Price Dataset:Click Here  



Follow Us On : 


 


--- FOLLOW OUR BLOG FOR MORE INFORMATION.

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

Comments

Popular posts from this blog

409.Can We Build a Reliable Emergency Services Analytics & Fraud Detection System in SAS While Identifying and Fixing Intentional Errors?

397.If a satellite has excellent signal strength but very high latency, can it still deliver good quality communication? Why or why not?A Sas Study

401.How Efficient Are Global Data Centers? A Complete SAS Analytics Study