Tuesday, 6 January 2026

362.STOCK SECTOR PERFORMANCE ANALYSIS USING SAS DATA STEP | PROC SQL | PROC MEANS | PROC REG | PROC SGPLOT | MACROS | DATE FUNCTIONS | MERGE | APPEND | SET | TRANSPOSE

STOCK SECTOR PERFORMANCE ANALYSIS USING SAS DATA STEP | PROC SQL | PROC MEANS | PROC REG | PROC SGPLOT | MACROS | DATE FUNCTIONS | MERGE | APPEND | SET | TRANSPOSE 

options nocenter;

1.CREATING THE STOCK SECTORS DATASET

data stock_sectors;

    length Sector_Name $20;

    format Report_Date date9.;

    input Sector_Name $ Companies Index_Value Growth_Rate Risk_Level Report_Date : date9.;

    datalines;

IT 120 18500 12.5 4 01JAN2024

BANKING 95 42100 8.2 6 01JAN2024

PHARMA 60 15600 10.1 5 01JAN2024

FMCG 80 29800 6.5 3 01JAN2024

ENERGY 70 34000 7.8 7 01JAN2024

METALS 55 21400 9.3 8 01JAN2024

AUTO 65 28750 11.2 6 01JAN2024

REALTY 40 17300 5.4 9 01JAN2024

TELECOM 30 9200 4.1 8 01JAN2024

MEDIA 25 8700 3.6 7 01JAN2024

INFRA 50 26600 8.9 7 01JAN2024

CHEMICALS 45 19200 10.7 5 01JAN2024

CEMENT 35 16400 6.8 6 01JAN2024

TEXTILES 28 8900 4.9 7 01JAN2024

POWER 60 23800 7.3 6 01JAN2024

;

run;

proc print data=stock_sectors;

run;

OUTPUT:

ObsSector_NameReport_DateCompaniesIndex_ValueGrowth_RateRisk_Level
1IT01JAN20241201850012.54
2BANKING01JAN202495421008.26
3PHARMA01JAN2024601560010.15
4FMCG01JAN202480298006.53
5ENERGY01JAN202470340007.87
6METALS01JAN202455214009.38
7AUTO01JAN2024652875011.26
8REALTY01JAN202440173005.49
9TELECOM01JAN20243092004.18
10MEDIA01JAN20242587003.67
11INFRA01JAN202450266008.97
12CHEMICALS01JAN2024451920010.75
13CEMENT01JAN202435164006.86
14TEXTILES01JAN20242889004.97
15POWER01JAN202460238007.36


2.DATE DERIVATIONS USING MDY, INTNX, INTCK

data stock_sectors_dates;

    set stock_sectors;

    Next_Quarter = intnx('quarter', Report_Date, 1, 'begin');

    Prev_Year_Days = intck('day', intnx('year', Report_Date, -1), Report_Date);

    format Next_Quarter date9.;

run;

proc print data=stock_sectors_dates;

run;

OUTPUT:

ObsSector_NameReport_DateCompaniesIndex_ValueGrowth_RateRisk_LevelNext_QuarterPrev_Year_Days
1IT01JAN20241201850012.5401APR2024365
2BANKING01JAN202495421008.2601APR2024365
3PHARMA01JAN2024601560010.1501APR2024365
4FMCG01JAN202480298006.5301APR2024365
5ENERGY01JAN202470340007.8701APR2024365
6METALS01JAN202455214009.3801APR2024365
7AUTO01JAN2024652875011.2601APR2024365
8REALTY01JAN202440173005.4901APR2024365
9TELECOM01JAN20243092004.1801APR2024365
10MEDIA01JAN20242587003.6701APR2024365
11INFRA01JAN202450266008.9701APR2024365
12CHEMICALS01JAN2024451920010.7501APR2024365
13CEMENT01JAN202435164006.8601APR2024365
14TEXTILES01JAN20242889004.9701APR2024365
15POWER01JAN202460238007.3601APR2024365


3.USING PROC SQL FOR SECTOR INSIGHTS

proc sql;

    create table high_growth_sectors as

    select Sector_Name,Index_Value,Growth_Rate,Risk_Level

    from stock_sectors_dates

    where Growth_Rate > 9

    order by Growth_Rate desc;

quit;

proc print data=high_growth_sectors;

run;

OUTPUT:

ObsSector_NameIndex_ValueGrowth_RateRisk_Level
1IT1850012.54
2AUTO2875011.26
3CHEMICALS1920010.75
4PHARMA1560010.15
5METALS214009.38


4.APPEND OPERATION (PROC APPEND)

data new_sectors;

    length Sector_Name $20;

    format Report_Date date9.;

    input Sector_Name $ Companies Index_Value Growth_Rate Risk_Level Report_Date : date9.;

    datalines;

DEFENCE 22 14400 13.4 6 01JAN2024

RENEWABLE 35 19800 14.1 5 01JAN2024

;

run;

proc print data=new_sectors;

run;

OUTPUT:

ObsSector_NameReport_DateCompaniesIndex_ValueGrowth_RateRisk_Level
1DEFENCE01JAN2024221440013.46
2RENEWABLE01JAN2024351980014.15


proc append base=stock_sectors_dates

            data=new_sectors force;

run;

proc print data=stock_sectors_dates;

run;

OUTPUT:

ObsSector_NameReport_DateCompaniesIndex_ValueGrowth_RateRisk_LevelNext_QuarterPrev_Year_Days
1IT01JAN20241201850012.5401APR2024365
2BANKING01JAN202495421008.2601APR2024365
3PHARMA01JAN2024601560010.1501APR2024365
4FMCG01JAN202480298006.5301APR2024365
5ENERGY01JAN202470340007.8701APR2024365
6METALS01JAN202455214009.3801APR2024365
7AUTO01JAN2024652875011.2601APR2024365
8REALTY01JAN202440173005.4901APR2024365
9TELECOM01JAN20243092004.1801APR2024365
10MEDIA01JAN20242587003.6701APR2024365
11INFRA01JAN202450266008.9701APR2024365
12CHEMICALS01JAN2024451920010.7501APR2024365
13CEMENT01JAN202435164006.8601APR2024365
14TEXTILES01JAN20242889004.9701APR2024365
15POWER01JAN202460238007.3601APR2024365
16DEFENCE01JAN2024221440013.46..
17RENEWABLE01JAN2024351980014.15..


5.USING SET STATEMENT

data combined_sectors;

    set stock_sectors_dates 

        new_sectors;

run;

proc print data=combined_sectors;

run;

OUTPUT:

ObsSector_NameReport_DateCompaniesIndex_ValueGrowth_RateRisk_LevelNext_QuarterPrev_Year_Days
1IT01JAN20241201850012.5401APR2024365
2BANKING01JAN202495421008.2601APR2024365
3PHARMA01JAN2024601560010.1501APR2024365
4FMCG01JAN202480298006.5301APR2024365
5ENERGY01JAN202470340007.8701APR2024365
6METALS01JAN202455214009.3801APR2024365
7AUTO01JAN2024652875011.2601APR2024365
8REALTY01JAN202440173005.4901APR2024365
9TELECOM01JAN20243092004.1801APR2024365
10MEDIA01JAN20242587003.6701APR2024365
11INFRA01JAN202450266008.9701APR2024365
12CHEMICALS01JAN2024451920010.7501APR2024365
13CEMENT01JAN202435164006.8601APR2024365
14TEXTILES01JAN20242889004.9701APR2024365
15POWER01JAN202460238007.3601APR2024365
16DEFENCE01JAN2024221440013.46..
17RENEWABLE01JAN2024351980014.15..
18DEFENCE01JAN2024221440013.46..
19RENEWABLE01JAN2024351980014.15..


6.PROC MEANS – STATISTICAL SUMMARY

proc means data=combined_sectors mean min max;

    var Index_Value Growth_Rate Risk_Level;

run;

OUTPUT:

The MEANS Procedure

VariableMeanMinimumMaximum
Index_Value
Growth_Rate
Risk_Level
20455.26
9.0684211
6.1052632
8700.00
3.6000000
3.0000000
42100.00
14.1000000
9.0000000

7.MACRO FOR SECTOR RISK CLASSIFICATION

%macro sector_rating;

data sector_rating;

    set combined_sectors;

    length Risk_Category $12;


    if Risk_Level <= 3 then Risk_Category = "LOW";

    else if Risk_Level <= 6 then Risk_Category = "MEDIUM";

    else Risk_Category = "HIGH";

run;

proc print data=sector_rating;

run;

%mend;


%sector_rating;

OUTPUT:

ObsSector_NameReport_DateCompaniesIndex_ValueGrowth_RateRisk_LevelNext_QuarterPrev_Year_DaysRisk_Category
1IT01JAN20241201850012.5401APR2024365MEDIUM
2BANKING01JAN202495421008.2601APR2024365MEDIUM
3PHARMA01JAN2024601560010.1501APR2024365MEDIUM
4FMCG01JAN202480298006.5301APR2024365LOW
5ENERGY01JAN202470340007.8701APR2024365HIGH
6METALS01JAN202455214009.3801APR2024365HIGH
7AUTO01JAN2024652875011.2601APR2024365MEDIUM
8REALTY01JAN202440173005.4901APR2024365HIGH
9TELECOM01JAN20243092004.1801APR2024365HIGH
10MEDIA01JAN20242587003.6701APR2024365HIGH
11INFRA01JAN202450266008.9701APR2024365HIGH
12CHEMICALS01JAN2024451920010.7501APR2024365MEDIUM
13CEMENT01JAN202435164006.8601APR2024365MEDIUM
14TEXTILES01JAN20242889004.9701APR2024365HIGH
15POWER01JAN202460238007.3601APR2024365MEDIUM
16DEFENCE01JAN2024221440013.46..MEDIUM
17RENEWABLE01JAN2024351980014.15..MEDIUM
18DEFENCE01JAN2024221440013.46..MEDIUM
19RENEWABLE01JAN2024351980014.15..MEDIUM


8.PROC REG – RELATIONSHIP ANALYSIS

proc reg data=sector_rating;

    model Index_Value = Growth_Rate Risk_Level;

run;

quit;

OUTPUT:

The REG Procedure

Model: MODEL1

Dependent Variable: Index_Value

Number of Observations Read19
Number of Observations Used19
Analysis of Variance
SourceDFSum of
Squares
Mean
Square
F ValuePr > F
Model267790234338951170.410.6695
Error16131808424082380265  
Corrected Total181385874474   
Root MSE9076.35747R-Square0.0489
Dependent Mean20455Adj R-Sq-0.0700
Coeff Var44.37175  
Parameter Estimates
VariableDFParameter
Estimate
Standard
Error
t ValuePr > |t|
Intercept127665147641.870.0793
Growth_Rate158.09558715.288560.080.9363
Risk_Level1-1267.205741689.95995-0.750.4642

The REG Procedure

Model: MODEL1

Dependent Variable: Index_Value

Panel of fit diagnostics for Index_Value.
Panel of scatterplots of residuals by regressors for Index_Value.

9.PROC SGPLOT – VISUALIZATION

proc sgplot data=sector_rating;

    scatter x=Growth_Rate y=Index_Value;

    reg x=Growth_Rate y=Index_Value;

    title "Growth Rate vs Index Value by Sector";

run;

OUTPUT:

The SGPlot Procedure


10.MERGE OPERATION

proc sort data=sector_rating; by Sector_Name; run;

proc print data=sector_rating;

run;

OUTPUT:

ObsSector_NameReport_DateCompaniesIndex_ValueGrowth_RateRisk_LevelNext_QuarterPrev_Year_DaysRisk_Category
1AUTO01JAN2024652875011.2601APR2024365MEDIUM
2BANKING01JAN202495421008.2601APR2024365MEDIUM
3CEMENT01JAN202435164006.8601APR2024365MEDIUM
4CHEMICALS01JAN2024451920010.7501APR2024365MEDIUM
5DEFENCE01JAN2024221440013.46..MEDIUM
6DEFENCE01JAN2024221440013.46..MEDIUM
7ENERGY01JAN202470340007.8701APR2024365HIGH
8FMCG01JAN202480298006.5301APR2024365LOW
9INFRA01JAN202450266008.9701APR2024365HIGH
10IT01JAN20241201850012.5401APR2024365MEDIUM
11MEDIA01JAN20242587003.6701APR2024365HIGH
12METALS01JAN202455214009.3801APR2024365HIGH
13PHARMA01JAN2024601560010.1501APR2024365MEDIUM
14POWER01JAN202460238007.3601APR2024365MEDIUM
15REALTY01JAN202440173005.4901APR2024365HIGH
16RENEWABLE01JAN2024351980014.15..MEDIUM
17RENEWABLE01JAN2024351980014.15..MEDIUM
18TELECOM01JAN20243092004.1801APR2024365HIGH
19TEXTILES01JAN20242889004.9701APR2024365HIGH


proc sort data=high_growth_sectors; by Sector_Name; run;

proc print data=high_growth_sectors;

run;

OUTPUT:

ObsSector_NameIndex_ValueGrowth_RateRisk_Level
1AUTO2875011.26
2CHEMICALS1920010.75
3IT1850012.54
4METALS214009.38
5PHARMA1560010.15


data merged_sectors;

    merge sector_rating(in=a) high_growth_sectors(in=b);

    by Sector_Name;

    if a;

run;

proc print data=merged_sectors;

run;

OUTPUT:

ObsSector_NameReport_DateCompaniesIndex_ValueGrowth_RateRisk_LevelNext_QuarterPrev_Year_DaysRisk_Category
1AUTO01JAN2024652875011.2601APR2024365MEDIUM
2BANKING01JAN202495421008.2601APR2024365MEDIUM
3CEMENT01JAN202435164006.8601APR2024365MEDIUM
4CHEMICALS01JAN2024451920010.7501APR2024365MEDIUM
5DEFENCE01JAN2024221440013.46..MEDIUM
6DEFENCE01JAN2024221440013.46..MEDIUM
7ENERGY01JAN202470340007.8701APR2024365HIGH
8FMCG01JAN202480298006.5301APR2024365LOW
9INFRA01JAN202450266008.9701APR2024365HIGH
10IT01JAN20241201850012.5401APR2024365MEDIUM
11MEDIA01JAN20242587003.6701APR2024365HIGH
12METALS01JAN202455214009.3801APR2024365HIGH
13PHARMA01JAN2024601560010.1501APR2024365MEDIUM
14POWER01JAN202460238007.3601APR2024365MEDIUM
15REALTY01JAN202440173005.4901APR2024365HIGH
16RENEWABLE01JAN2024351980014.15..MEDIUM
17RENEWABLE01JAN2024351980014.15..MEDIUM
18TELECOM01JAN20243092004.1801APR2024365HIGH
19TEXTILES01JAN20242889004.9701APR2024365HIGH


11.PROC TRANSPOSE

proc transpose data=merged_sectors

               out=sector_transposed

               prefix=Value_;

    by Sector_Name;

    var Index_Value Growth_Rate Risk_Level;

run;

proc print data=sector_transposed;

run;

OUTPUT:

ObsSector_Name_NAME_Value_1Value_2
1AUTOIndex_Value28750.0.
2AUTOGrowth_Rate11.2.
3AUTORisk_Level6.0.
4BANKINGIndex_Value42100.0.
5BANKINGGrowth_Rate8.2.
6BANKINGRisk_Level6.0.
7CEMENTIndex_Value16400.0.
8CEMENTGrowth_Rate6.8.
9CEMENTRisk_Level6.0.
10CHEMICALSIndex_Value19200.0.
11CHEMICALSGrowth_Rate10.7.
12CHEMICALSRisk_Level5.0.
13DEFENCEIndex_Value14400.014400.0
14DEFENCEGrowth_Rate13.413.4
15DEFENCERisk_Level6.06.0
16ENERGYIndex_Value34000.0.
17ENERGYGrowth_Rate7.8.
18ENERGYRisk_Level7.0.
19FMCGIndex_Value29800.0.
20FMCGGrowth_Rate6.5.
21FMCGRisk_Level3.0.
22INFRAIndex_Value26600.0.
23INFRAGrowth_Rate8.9.
24INFRARisk_Level7.0.
25ITIndex_Value18500.0.
26ITGrowth_Rate12.5.
27ITRisk_Level4.0.
28MEDIAIndex_Value8700.0.
29MEDIAGrowth_Rate3.6.
30MEDIARisk_Level7.0.
31METALSIndex_Value21400.0.
32METALSGrowth_Rate9.3.
33METALSRisk_Level8.0.
34PHARMAIndex_Value15600.0.
35PHARMAGrowth_Rate10.1.
36PHARMARisk_Level5.0.
37POWERIndex_Value23800.0.
38POWERGrowth_Rate7.3.
39POWERRisk_Level6.0.
40REALTYIndex_Value17300.0.
41REALTYGrowth_Rate5.4.
42REALTYRisk_Level9.0.
43RENEWABLEIndex_Value19800.019800.0
44RENEWABLEGrowth_Rate14.114.1
45RENEWABLERisk_Level5.05.0
46TELECOMIndex_Value9200.0.
47TELECOMGrowth_Rate4.1.
48TELECOMRisk_Level8.0.
49TEXTILESIndex_Value8900.0.
50TEXTILESGrowth_Rate4.9.
51TEXTILESRisk_Level7.0.


YESTERDAY'S QUESTION:

data rivers_error;

    set rivers_dates;

    if Pollution_Level between 60 and 70 and and Trade_Importance > 7 then Flag="YES";

run;


data rivers_error;

    set rivers_dates;

    Pollution_Level_N = input(Pollution_Level, best.);

    if Pollution_Level_N >= 60 and Pollution_Level_N <= 70

       and Trade_Importance > 7 then

        Flag = "YES";

run;

-->Where BETWEEN IS ALLOWED

  • WHERE statement

  • PROC SQL

-->Where BETWEEN IS NOT ALLOWED

  • IF condition in a DATA step 

/* Note: In practice above there is an Invalid in this code Find it,Correct it and Use it /*

OUTPUT:

ObsRiver_NameSurvey_DateLengthCountries_CrossedPollution_LevelTrade_ImportanceNext_Review_DateYears_Since_SurveyReview_Year_StartPollution_Level_NFlag
1Ganges01JAN20222525278901JUL2022301JAN202278 
2Nile15FEB2022665011651015AUG2022301JAN202265YES
3Amazon10MAR20226400745810SEP2022301JAN202245 
4Yangtze05APR20226300172905OCT2022301JAN202272 
5Mississippi20MAY20223730160820NOV2022301JAN202260YES
6Danube18JUN202228601055718DEC2022301JAN202255 
7Volga30JUL20223530150630JAN2023301JAN202250 
8Rhine15AUG20221230668815FEB2023301JAN202268YES
9Mekong01SEP20224350670701MAR2023301JAN202270 
10Indus10OCT20223180462810APR2023301JAN202262YES
11Tigris15NOV20221850375615MAY2023301JAN202275 
12Euphrates20DEC20222800473720JUN2023301JAN202273 




To Visit My Previous Software Company Analysis Dataset:Click Here
To Visit My Previous Vote Program Dataset:Click Here
To Visit My Previous Audi Cars Performance Analysis Dataset:Click Here
To Visit My Previous Global Clothing Trends Dataset:Click Here  



Follow Us On : 


 


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


No comments:

Post a Comment