Thursday, 6 November 2025

302.INDIAN MUSIC ANALYTICS USING PROC FORMAT, PROC MEANS, PROC SQL, PROC FREQ, AND PROC PRINT

INDIAN MUSIC ANALYTICS USING PROC FORMAT, PROC MEANS, PROC SQL, PROC FREQ, AND PROC PRINT

 options nodate nonumber nocenter;

1.Create the data

data music_in_india;

  length Genre $30 Region $12 Era $10 Owner $25;

  infile datalines dlm='|' dsd truncover;

  input Genre :$30. Region :$12. Era :$10. TempoBPM PopularityIndex Owner :$25.;

  datalines;

Hindustani Classical|North|Pre-2000|72|78|Saregama

Carnatic|South|Pre-2000|80|74|Saregama

Bollywood|Pan-India|2010s|122|92|T-Series

Folk-Baoul|East|2000s|96|68|Times Music

Sufi/Qawwali|North|2000s|88|81|Saregama

Indie Pop|Pan-India|2020s|110|85|Sony Music India

Ghazal|North|Pre-2000|68|77|Saregama

EDM/Bollywood Remix|Pan-India|2020s|128|83|Zee Music

Hip-Hop/Desi Rap|Pan-India|2020s|98|89|Divine-Independent

Tollywood Filmi (Telugu)|South|2010s|116|84|Aditya Music

Kollywood Filmi (Tamil)|South|2010s|114|82|Sony Music India

Folk-Bihu|Northeast|2000s|104|69|Times Music

;

run;

proc print data=music_in_india;

run;

OUTPUT:

ObsGenreRegionEraOwnerTempoBPMPopularityIndex
1Hindustani ClassicalNorthPre-2000Saregama7278
2CarnaticSouthPre-2000Saregama8074
3BollywoodPan-India2010sT-Series12292
4Folk-BaoulEast2000sTimes Music9668
5Sufi/QawwaliNorth2000sSaregama8881
6Indie PopPan-India2020sSony Music India11085
7GhazalNorthPre-2000Saregama6877
8EDM/Bollywood RemixPan-India2020sZee Music12883
9Hip-Hop/Desi RapPan-India2020sDivine-Independent9889
10Tollywood Filmi (Telugu)South2010sAditya Music11684
11Kollywood Filmi (Tamil)South2010sSony Music India11482
12Folk-BihuNortheast2000sTimes Music10469


2.PROC FORMAT

proc format;

  value tempo_cat

     low - <90  = 'Slow (<90 BPM)'

     90 - 120   = 'Moderate (90-120)'

     120 - high = 'Fast (>120)';

  value pop_cat

     0 - <70    = 'Niche (<70)'

     70 - <80   = 'Popular (70-79)'

     80 - <90   = 'Hit (80-89)'

     90 - high  = 'Blockbuster (90+)';

  value $region_cat

     'North'      = 'North India'

     'South'      = 'South India'

     'East'       = 'East India'

     'West'       = 'West India'

     'Northeast'  = 'Northeast India'

     'Pan-India'  = 'Pan-India / National';

run;


/* apply formats in a view for display convenience */

data music_fmt;

  set music_in_india;

  length TempoBucket $20 PopBucket $18 RegionLabel $22;

  TempoBucket = put(TempoBPM, tempo_cat.);

  PopBucket   = put(PopularityIndex, pop_cat.);

  RegionLabel = put(Region, $region_cat.);

run;

proc print data=music_fmt;

run;

OUTPUT:

ObsGenreRegionEraOwnerTempoBPMPopularityIndexTempoBucketPopBucketRegionLabel
1Hindustani ClassicalNorthPre-2000Saregama7278Slow (<90 BPM)Popular (70-79)North India
2CarnaticSouthPre-2000Saregama8074Slow (<90 BPM)Popular (70-79)South India
3BollywoodPan-India2010sT-Series12292Fast (>120)Blockbuster (90+)Pan-India / National
4Folk-BaoulEast2000sTimes Music9668Moderate (90-120)Niche (<70)East India
5Sufi/QawwaliNorth2000sSaregama8881Slow (<90 BPM)Hit (80-89)North India
6Indie PopPan-India2020sSony Music India11085Moderate (90-120)Hit (80-89)Pan-India / National
7GhazalNorthPre-2000Saregama6877Slow (<90 BPM)Popular (70-79)North India
8EDM/Bollywood RemixPan-India2020sZee Music12883Fast (>120)Hit (80-89)Pan-India / National
9Hip-Hop/Desi RapPan-India2020sDivine-Independent9889Moderate (90-120)Hit (80-89)Pan-India / National
10Tollywood Filmi (Telugu)South2010sAditya Music11684Moderate (90-120)Hit (80-89)South India
11Kollywood Filmi (Tamil)South2010sSony Music India11482Moderate (90-120)Hit (80-89)South India
12Folk-BihuNortheast2000sTimes Music10469Moderate (90-120)Niche (<70)Northeast India


3.PROC MEANS using BY groups

proc sort data=music_in_india out=music_bygenre;

  by Genre;

run;

proc print data=music_bygenre;

run;

OUTPUT:

ObsGenreRegionEraOwnerTempoBPMPopularityIndex
1BollywoodPan-India2010sT-Series12292
2CarnaticSouthPre-2000Saregama8074
3EDM/Bollywood RemixPan-India2020sZee Music12883
4Folk-BaoulEast2000sTimes Music9668
5Folk-BihuNortheast2000sTimes Music10469
6GhazalNorthPre-2000Saregama6877
7Hindustani ClassicalNorthPre-2000Saregama7278
8Hip-Hop/Desi RapPan-India2020sDivine-Independent9889
9Indie PopPan-India2020sSony Music India11085
10Kollywood Filmi (Tamil)South2010sSony Music India11482
11Sufi/QawwaliNorth2000sSaregama8881
12Tollywood Filmi (Telugu)South2010sAditya Music11684


proc means data=music_bygenre n mean min p25 median p75 max maxdec=1;

  by Genre; 

  var TempoBPM PopularityIndex;

  ods output Summary=means_by_genre;  

run;

proc print data=means_by_genre;

run;

OUTPUT:

The MEANS Procedure

VariableNMeanMinimum25th PctlMedian75th PctlMaximum
TempoBPM
PopularityIndex
1
1
122.0
92.0
122.0
92.0
122.0
92.0
122.0
92.0
122.0
92.0
122.0
92.0
VariableNMeanMinimum25th PctlMedian75th PctlMaximum
TempoBPM
PopularityIndex
1
1
80.0
74.0
80.0
74.0
80.0
74.0
80.0
74.0
80.0
74.0
80.0
74.0
VariableNMeanMinimum25th PctlMedian75th PctlMaximum
TempoBPM
PopularityIndex
1
1
128.0
83.0
128.0
83.0
128.0
83.0
128.0
83.0
128.0
83.0
128.0
83.0
VariableNMeanMinimum25th PctlMedian75th PctlMaximum
TempoBPM
PopularityIndex
1
1
96.0
68.0
96.0
68.0
96.0
68.0
96.0
68.0
96.0
68.0
96.0
68.0
VariableNMeanMinimum25th PctlMedian75th PctlMaximum
TempoBPM
PopularityIndex
1
1
104.0
69.0
104.0
69.0
104.0
69.0
104.0
69.0
104.0
69.0
104.0
69.0
VariableNMeanMinimum25th PctlMedian75th PctlMaximum
TempoBPM
PopularityIndex
1
1
68.0
77.0
68.0
77.0
68.0
77.0
68.0
77.0
68.0
77.0
68.0
77.0
VariableNMeanMinimum25th PctlMedian75th PctlMaximum
TempoBPM
PopularityIndex
1
1
72.0
78.0
72.0
78.0
72.0
78.0
72.0
78.0
72.0
78.0
72.0
78.0
VariableNMeanMinimum25th PctlMedian75th PctlMaximum
TempoBPM
PopularityIndex
1
1
98.0
89.0
98.0
89.0
98.0
89.0
98.0
89.0
98.0
89.0
98.0
89.0
VariableNMeanMinimum25th PctlMedian75th PctlMaximum
TempoBPM
PopularityIndex
1
1
110.0
85.0
110.0
85.0
110.0
85.0
110.0
85.0
110.0
85.0
110.0
85.0
VariableNMeanMinimum25th PctlMedian75th PctlMaximum
TempoBPM
PopularityIndex
1
1
114.0
82.0
114.0
82.0
114.0
82.0
114.0
82.0
114.0
82.0
114.0
82.0
VariableNMeanMinimum25th PctlMedian75th PctlMaximum
TempoBPM
PopularityIndex
1
1
88.0
81.0
88.0
81.0
88.0
81.0
88.0
81.0
88.0
81.0
88.0
81.0
VariableNMeanMinimum25th PctlMedian75th PctlMaximum
TempoBPM
PopularityIndex
1
1
116.0
84.0
116.0
84.0
116.0
84.0
116.0
84.0
116.0
84.0
116.0
84.0
ObsGenreVName_TempoBPMTempoBPM_NTempoBPM_MeanTempoBPM_MinTempoBPM_P25TempoBPM_MedianTempoBPM_P75TempoBPM_MaxVName_PopularityIndexPopularityIndex_NPopularityIndex_MeanPopularityIndex_MinPopularityIndex_P25PopularityIndex_MedianPopularityIndex_P75PopularityIndex_Max
1BollywoodTempoBPM1122.0122.0122.0122.0122.0122.0PopularityIndex192.092.092.092.092.092.0
2CarnaticTempoBPM180.080.080.080.080.080.0PopularityIndex174.074.074.074.074.074.0
3EDM/Bollywood RemixTempoBPM1128.0128.0128.0128.0128.0128.0PopularityIndex183.083.083.083.083.083.0
4Folk-BaoulTempoBPM196.096.096.096.096.096.0PopularityIndex168.068.068.068.068.068.0
5Folk-BihuTempoBPM1104.0104.0104.0104.0104.0104.0PopularityIndex169.069.069.069.069.069.0
6GhazalTempoBPM168.068.068.068.068.068.0PopularityIndex177.077.077.077.077.077.0
7Hindustani ClassicalTempoBPM172.072.072.072.072.072.0PopularityIndex178.078.078.078.078.078.0
8Hip-Hop/Desi RapTempoBPM198.098.098.098.098.098.0PopularityIndex189.089.089.089.089.089.0
9Indie PopTempoBPM1110.0110.0110.0110.0110.0110.0PopularityIndex185.085.085.085.085.085.0
10Kollywood Filmi (Tamil)TempoBPM1114.0114.0114.0114.0114.0114.0PopularityIndex182.082.082.082.082.082.0
11Sufi/QawwaliTempoBPM188.088.088.088.088.088.0PopularityIndex181.081.081.081.081.081.0
12Tollywood Filmi (Telugu)TempoBPM1116.0116.0116.0116.0116.0116.0PopularityIndex184.084.084.084.084.084.0

proc sort data=music_in_india out=music_byregera;

  by Region Era;

run;

proc print data=music_byregera;

run;

OUTPUT:

ObsGenreRegionEraOwnerTempoBPMPopularityIndex
1Folk-BaoulEast2000sTimes Music9668
2Sufi/QawwaliNorth2000sSaregama8881
3Hindustani ClassicalNorthPre-2000Saregama7278
4GhazalNorthPre-2000Saregama6877
5Folk-BihuNortheast2000sTimes Music10469
6BollywoodPan-India2010sT-Series12292
7Indie PopPan-India2020sSony Music India11085
8EDM/Bollywood RemixPan-India2020sZee Music12883
9Hip-Hop/Desi RapPan-India2020sDivine-Independent9889
10Tollywood Filmi (Telugu)South2010sAditya Music11684
11Kollywood Filmi (Tamil)South2010sSony Music India11482
12CarnaticSouthPre-2000Saregama8074


proc means data=music_byregera n mean std min median max maxdec=1;

  by Region Era;

  var TempoBPM PopularityIndex;

  ods output Summary=means_by_region_era;

run;

proc print data=means_by_region_era;

run;

OUTPUT:

The MEANS Procedure

VariableNMeanStd DevMinimumMedianMaximum
TempoBPM
PopularityIndex
1
1
96.0
68.0
.
.
96.0
68.0
96.0
68.0
96.0
68.0
VariableNMeanStd DevMinimumMedianMaximum
TempoBPM
PopularityIndex
1
1
88.0
81.0
.
.
88.0
81.0
88.0
81.0
88.0
81.0
VariableNMeanStd DevMinimumMedianMaximum
TempoBPM
PopularityIndex
2
2
70.0
77.5
2.8
0.7
68.0
77.0
70.0
77.5
72.0
78.0
VariableNMeanStd DevMinimumMedianMaximum
TempoBPM
PopularityIndex
1
1
104.0
69.0
.
.
104.0
69.0
104.0
69.0
104.0
69.0
VariableNMeanStd DevMinimumMedianMaximum
TempoBPM
PopularityIndex
1
1
122.0
92.0
.
.
122.0
92.0
122.0
92.0
122.0
92.0
VariableNMeanStd DevMinimumMedianMaximum
TempoBPM
PopularityIndex
3
3
112.0
85.7
15.1
3.1
98.0
83.0
110.0
85.0
128.0
89.0
VariableNMeanStd DevMinimumMedianMaximum
TempoBPM
PopularityIndex
2
2
115.0
83.0
1.4
1.4
114.0
82.0
115.0
83.0
116.0
84.0
VariableNMeanStd DevMinimumMedianMaximum
TempoBPM
PopularityIndex
1
1
80.0
74.0
.
.
80.0
74.0
80.0
74.0
80.0
74.0
ObsRegionEraVName_TempoBPMTempoBPM_NTempoBPM_MeanTempoBPM_StdDevTempoBPM_MinTempoBPM_MedianTempoBPM_MaxVName_PopularityIndexPopularityIndex_NPopularityIndex_MeanPopularityIndex_StdDevPopularityIndex_MinPopularityIndex_MedianPopularityIndex_Max
1East2000sTempoBPM196.0.96.096.096.0PopularityIndex168.0.68.068.068.0
2North2000sTempoBPM188.0.88.088.088.0PopularityIndex181.0.81.081.081.0
3NorthPre-2000TempoBPM270.02.868.070.072.0PopularityIndex277.50.777.077.578.0
4Northeast2000sTempoBPM1104.0.104.0104.0104.0PopularityIndex169.0.69.069.069.0
5Pan-India2010sTempoBPM1122.0.122.0122.0122.0PopularityIndex192.0.92.092.092.0
6Pan-India2020sTempoBPM3112.015.198.0110.0128.0PopularityIndex385.73.183.085.089.0
7South2010sTempoBPM2115.01.4114.0115.0116.0PopularityIndex283.01.482.083.084.0
8SouthPre-2000TempoBPM180.0.80.080.080.0PopularityIndex174.0.74.074.074.0

4.PROC SQL: GROUP BY + HAVING

/* Average popularity and count by Genre, show only strong performers */

proc sql;

  create table genre_perf as

  select 

      Genre

    , count(*) as N

    , mean(PopularityIndex) as AvgPop format=6.2

    , mean(TempoBPM)        as AvgTempo format=6.1

  from music_in_india

  group by Genre

  having calculated AvgPop >= 75     

     and calculated N >= 1;

quit;

proc print data=genre_perf;

run;

OUTPUT:

ObsGenreNAvgPopAvgTempo
1Bollywood192.00122.0
2EDM/Bollywood Remix183.00128.0
3Ghazal177.0068.0
4Hindustani Classical178.0072.0
5Hip-Hop/Desi Rap189.0098.0
6Indie Pop185.00110.0
7Kollywood Filmi (Tamil)182.00114.0
8Sufi/Qawwali181.0088.0
9Tollywood Filmi (Telugu)184.00116.0

/* Region-level share of rows by owner, and filter to owners with >=2 appearances */

proc sql;

  create table owner_region_counts as

  select 

      Region

    , Owner

    , count(*) as Titles

  from music_in_india

  group by Region, Owner

  having calculated Titles >= 1;  

quit;

proc print data=owner_region_counts;

run;

OUTPUT:

ObsRegionOwnerTitles
1EastTimes Music1
2NorthSaregama3
3NortheastTimes Music1
4Pan-IndiaDivine-Independent1
5Pan-IndiaSony Music India1
6Pan-IndiaT-Series1
7Pan-IndiaZee Music1
8SouthAditya Music1
9SouthSaregama1
10SouthSony Music India1


5.Genre × Region Frequency Table

title "Table : Cross-Tabulation of Music Genre by Region";

proc freq data=music_fmt;

    tables Genre * Region / norow nocol nocum;

run;

OUTPUT:

Table : Cross-Tabulation of Music Genre by Region

The FREQ Procedure

Frequency
Percent
Table of Genre by Region
GenreRegion
EastNorthNortheastPan-IndiaSouthTotal
Bollywood
0
0.00
0
0.00
0
0.00
1
8.33
0
0.00
1
8.33
Carnatic
0
0.00
0
0.00
0
0.00
0
0.00
1
8.33
1
8.33
EDM/Bollywood Remix
0
0.00
0
0.00
0
0.00
1
8.33
0
0.00
1
8.33
Folk-Baoul
1
8.33
0
0.00
0
0.00
0
0.00
0
0.00
1
8.33
Folk-Bihu
0
0.00
0
0.00
1
8.33
0
0.00
0
0.00
1
8.33
Ghazal
0
0.00
1
8.33
0
0.00
0
0.00
0
0.00
1
8.33
Hindustani Classical
0
0.00
1
8.33
0
0.00
0
0.00
0
0.00
1
8.33
Hip-Hop/Desi Rap
0
0.00
0
0.00
0
0.00
1
8.33
0
0.00
1
8.33
Indie Pop
0
0.00
0
0.00
0
0.00
1
8.33
0
0.00
1
8.33
Kollywood Filmi (Tamil)
0
0.00
0
0.00
0
0.00
0
0.00
1
8.33
1
8.33
Sufi/Qawwali
0
0.00
1
8.33
0
0.00
0
0.00
0
0.00
1
8.33
Tollywood Filmi (Telugu)
0
0.00
0
0.00
0
0.00
0
0.00
1
8.33
1
8.33
Total
1
8.33
3
25.00
1
8.33
4
33.33
3
25.00
12
100.00

6.Genre-Wise Popularity & Tempo Summary

title "Table : Summary Statistics by Genre";

proc means data=music_fmt n mean std min max maxdec=2;

    class Genre;

    var TempoBPM PopularityIndex;

    output out=genre_stats

           n= Count_Tempo Count_Pop

           mean= Mean_Tempo Mean_Pop

           std= SD_Tempo SD_Pop

           min= Min_Tempo Min_Pop

           max= Max_Tempo Max_Pop;

run;

OUTPUT:

Table : Summary Statistics by Genre

The MEANS Procedure

GenreN ObsVariableNMeanStd DevMinimumMaximum
Bollywood1
TempoBPM
PopularityIndex
1
1
122.00
92.00
.
.
122.00
92.00
122.00
92.00
Carnatic1
TempoBPM
PopularityIndex
1
1
80.00
74.00
.
.
80.00
74.00
80.00
74.00
EDM/Bollywood Remix1
TempoBPM
PopularityIndex
1
1
128.00
83.00
.
.
128.00
83.00
128.00
83.00
Folk-Baoul1
TempoBPM
PopularityIndex
1
1
96.00
68.00
.
.
96.00
68.00
96.00
68.00
Folk-Bihu1
TempoBPM
PopularityIndex
1
1
104.00
69.00
.
.
104.00
69.00
104.00
69.00
Ghazal1
TempoBPM
PopularityIndex
1
1
68.00
77.00
.
.
68.00
77.00
68.00
77.00
Hindustani Classical1
TempoBPM
PopularityIndex
1
1
72.00
78.00
.
.
72.00
78.00
72.00
78.00
Hip-Hop/Desi Rap1
TempoBPM
PopularityIndex
1
1
98.00
89.00
.
.
98.00
89.00
98.00
89.00
Indie Pop1
TempoBPM
PopularityIndex
1
1
110.00
85.00
.
.
110.00
85.00
110.00
85.00
Kollywood Filmi (Tamil)1
TempoBPM
PopularityIndex
1
1
114.00
82.00
.
.
114.00
82.00
114.00
82.00
Sufi/Qawwali1
TempoBPM
PopularityIndex
1
1
88.00
81.00
.
.
88.00
81.00
88.00
81.00
Tollywood Filmi (Telugu)1
TempoBPM
PopularityIndex
1
1
116.00
84.00
.
.
116.00
84.00
116.00
84.00

proc print data=genre_stats noobs label;

    label Count_Tempo = "N (Tempo)"

          Mean_Tempo  = "Mean Tempo"

          SD_Tempo    = "SD Tempo"

          Min_Tempo   = "Min Tempo"

          Max_Tempo   = "Max Tempo"

          Mean_Pop    = "Mean Popularity"

          SD_Pop      = "SD Popularity";

run;

OUTPUT:

Genre_TYPE__FREQ_N (Tempo)Count_PopMean TempoMean PopularitySD TempoSD PopularityMin TempoMin_PopMax TempoMax_Pop
 012121299.66780.166719.55577.34641686812892
Bollywood1111122.00092.0000..1229212292
Carnatic111180.00074.0000..80748074
EDM/Bollywood Remix1111128.00083.0000..1288312883
Folk-Baoul111196.00068.0000..96689668
Folk-Bihu1111104.00069.0000..1046910469
Ghazal111168.00077.0000..68776877
Hindustani Classical111172.00078.0000..72787278
Hip-Hop/Desi Rap111198.00089.0000..98899889
Indie Pop1111110.00085.0000..1108511085
Kollywood Filmi (Tamil)1111114.00082.0000..1148211482
Sufi/Qawwali111188.00081.0000..88818881
Tollywood Filmi (Telugu)1111116.00084.0000..1168411684



To Visit My Previous Online Streaming Flatform Dataset:Click Here
To Visit My Previous Statistical Evaluation Of Clinical Trials:Click Here
To Visit My Previous Unlocking Retail Insights Dataset:Click Here
To Visit My Previous Sas Interview Questions-1:Click Here  



Follow Us On : 


 


--- FOLLOW OUR BLOG FOR MORE INFORMATION.

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

No comments:

Post a Comment