362.How Can SAS Be Used to Analyze Stock Sector Performance Using Data Step, PROC SQL, Regression, and Advanced Reporting Techniques?

How Can SAS Be Used to Analyze Stock Sector Performance Using Data Step, PROC SQL, Regression, and Advanced Reporting Techniques?

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.


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