Thursday, 4 December 2025

329.AGRICULTURAL MACHINERY DATASET CREATION WITH DATA STEP | PROC SQL | PROC MEANS | PROC FREQ | PROC CORR | MACROS FOR PERFORMANCE & DATE CALCULATIONS

AGRICULTURAL MACHINERY DATASET CREATION WITH DATA STEP | PROC SQL | PROC MEANS | PROC FREQ | PROC CORR | MACROS FOR PERFORMANCE & 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.

No comments:

Post a Comment