277.OTT PLATFORMS IN INDIA — PROC FORMAT | PROC CONTENTS | PROC SORT | PROC PRINT | PROC FREQ | PROC MEANS | PROC SUMMARY | PROC UNIVARIATE | PROC TABULATE | PROC REPORT | PROC TRANSPOSE | PROC SQL | PROC RANK | PROC SGPLOT | MACROS
OTT PLATFORMS IN INDIA — PROC FORMAT | PROC CONTENTS | PROC SORT | PROC PRINT | PROC FREQ | PROC MEANS | PROC SUMMARY | PROC UNIVARIATE | PROC TABULATE | PROC REPORT | PROC TRANSPOSE | PROC SQL | PROC RANK | PROC SGPLOT | MACROS
/*CREATING THE DATASET OF INDIA OTT LANDSCAPE*/
SECTION 1: FORMATS & SETUP
PURPOSE: Create user‑friendly value labels for flags and business categories.
proc format;
value yesno 0='No'
1='Yes';
value $model 'SVOD'='SVOD (Subscription)'
'AVOD'='AVOD (Ad‑Supported)'
'TVOD'='TVOD (Transactional)'
'Hybrid'='Hybrid (Mix)'
'Sports'='Sports‑centric';
value $region 'Pan‑India'='Pan‑India'
'Hindi'='Hindi'
'Telugu'='Telugu'
'Tamil'='Tamil'
'Bengali'='Bengali'
'Malayalam'='Malayalam'
'Kannada'='Kannada'
'Marathi'='Marathi'
'Multi‑regional'='Multi‑regional';
run;
Log:
SECTION 2: DATA CREATION
PURPOSE: Create a realistic OTT platforms dataset with > 25 observations.
data ott_india_raw;
length Platform_ID 8 Name $40 ParentCompany $40 HQ_City $20 Model $10
Regional_Focus $15 Genres $40 Notes $60;
length Launch_Year_India 8 Price_Monthly_INR 8 Annual_Price_INR 8
Subscribers_Mn 8 MAUs_Mn 8 Originals_Count_2024 8 Avg_IMDB_Originals 8
FourK_Support 8 Offline_Downloads 8 Ad_Tier_Flag 8 Sports_Rights_Flag 8;
infile datalines dsd truncover;
input Platform_ID Name :$40. ParentCompany :$40. HQ_City :$20.
Model :$10. Regional_Focus :$15. Genres :$40. Launch_Year_India
Price_Monthly_INR Annual_Price_INR Subscribers_Mn MAUs_Mn
Originals_Count_2024 Avg_IMDB_Originals FourK_Support Offline_Downloads
Ad_Tier_Flag Sports_Rights_Flag Notes :$60.;
format FourK_Support Offline_Downloads Ad_Tier_Flag Sports_Rights_Flag yesno.
Model $model. Regional_Focus $region.;
label Name='Platform Name' ParentCompany='Parent Company' HQ_City='HQ (India)'
Model='Business Model' Regional_Focus='Regional Focus' Genres='Popular Genres'
Launch_Year_India='Launch Year (India)' Price_Monthly_INR='Monthly Price (INR)'
Annual_Price_INR='Annual Price (INR)' Subscribers_Mn='Subscribers (Mn, India est)'
MAUs_Mn='Monthly Active Users (Mn)' Originals_Count_2024='Originals Count (till 2024)'
Avg_IMDB_Originals='Avg IMDb of Originals' FourK_Support='4K Support'
Offline_Downloads='Offline Downloads' Ad_Tier_Flag='Has Ad Tier'
Sports_Rights_Flag='Sports Rights';
datalines;
1,"Netflix India","Netflix, Inc.","Mumbai","SVOD","Pan‑India","Drama, Thriller, Comedy",2016,649,4999,8.2,16.5,220,7.1,1,1,1,0,"Premium global originals"
2,"Amazon Prime Video","Amazon","Bengaluru","SVOD","Pan‑India","Action, Drama, Comedy",2016,299,1499,20.5,35.0,180,7.0,1,1,0,1,"Bundled with Prime"
3,"Disney+ Hotstar","Disney","Mumbai","Hybrid","Hindi","Drama, Sports, Reality",2015,299,899,40.0,50.0,150,6.8,1,1,1,1,"Large sports slate"
4,"SonyLIV","Sony Pictures","Mumbai","SVOD","Hindi","Thriller, Sports, Reality",2014,299,999,15.0,22.0,120,6.9,1,1,1,1,"Original thrillers"
5,"ZEE5","Zee Entertainment","Mumbai","Hybrid","Multi‑regional","Drama, Soap, Reality",2018,199,699,34.0,40.0,140,6.5,1,1,1,0,"Strong TV library"
6,"JioCinema","Reliance","Mumbai","AVOD","Pan‑India","Movies, Sports",2019,0,0,85.0,120.0,60,6.0,1,1,1,1,"Scale via telco"
7,"MX Player","Times Internet","Mumbai","AVOD","Pan‑India","Drama, Reality",2018,0,0,58.0,95.0,70,5.9,0,1,1,0,"High AVOD reach"
8,"ALTBalaji/ALTT","Balaji Telefilms","Mumbai","SVOD","Hindi","Romance, Drama",2017,100,300,3.2,6.0,95,5.8,0,1,1,0,"Niche originals"
9,"Eros Now","Eros Media","Mumbai","SVOD","Hindi","Movies, Music",2012,99,399,12.0,18.0,85,6.0,0,1,1,0,"Movie catalogue"
10,"ShemarooMe","Shemaroo","Mumbai","SVOD","Multi‑regional","Classics, Devotional",2019,149,799,4.0,7.5,45,6.2,0,1,1,0,"Legacy catalogue"
11,"Sun NXT","Sun TV Network","Chennai","SVOD","Tamil","Movies, Serials",2017,99,799,12.5,16.0,55,6.1,0,1,1,0,"South focus"
12,"Hoichoi","SVF","Kolkata","SVOD","Bengali","Thriller, Drama",2017,149,999,2.8,5.2,120,7.2,0,1,0,0,"Bengali originals"
13,"Aha","Arha Media","Hyderabad","SVOD","Telugu","Comedy, Drama",2020,199,699,3.9,6.8,110,6.7,0,1,0,0,"Telugu focus"
14,"Lionsgate Play","Lionsgate","Mumbai","SVOD","Pan‑India","Hollywood, Thriller",2020,149,999,3.5,5.5,65,7.0,1,1,1,0,"Premium imports"
15,"Apple TV+","Apple","Mumbai","SVOD","Pan‑India","Drama, Sci‑Fi",2019,99,1499,1.8,3.0,45,7.7,1,1,0,0,"High‑quality originals"
16,"YouTube Premium","Google","Hyderabad","SVOD","Pan‑India","Creators, Music",2018,139,1299,7.0,28.0,25,7.0,1,1,1,0,"Ad‑free YouTube"
17,"Discovery+ (IN)","Warner Bros. Discovery","New Delhi","SVOD","Pan‑India","Docu, Lifestyle",2020,199,399,4.5,8.0,35,7.1,1,1,1,1,"Factual + sports tie‑ins"
18,"TVF Play","TVF","Mumbai","AVOD","Hindi","Comedy, Slice‑of‑life",2016,0,0,2.0,4.5,25,7.8,0,1,1,0,"Cult web shows"
19,"Stage","Stage OTT","Gurugram","SVOD","Hindi","Haryanvi, Rajasthani",2019,199,999,1.2,2.1,35,7.0,0,1,0,0,"Dialect content"
20,"Ullu","Ullu Digital","Mumbai","SVOD","Hindi","Bold, Thriller",2018,198,1488,3.0,5.0,70,5.5,0,1,1,0,"Adult drama"
21,"Chaupal","Chaupal OTT","Mohali","SVOD","Punjabi","Movies, Serials",2021,99,799,0.9,1.5,40,6.1,0,1,0,0,"Punjabi focus"
22,"Planet Marathi","Planet Marathi","Mumbai","SVOD","Marathi","Movies, Serials",2021,99,699,0.6,1.2,30,6.0,0,1,0,0,"Marathi focus"
23,"ManoramaMAX","MM TV","Kochi","SVOD","Malayalam","News, Serials",2019,99,999,1.5,2.8,35,6.2,0,1,1,0,"Malayalam focus"
24,"Koode","Studio Mojo","Kochi","AVOD","Malayalam","Movies, Serials",2020,0,0,0.7,1.3,20,5.8,0,1,1,0,"Malayalam AVOD"
25,"Namma Flix","Indie","Bengaluru","SVOD","Kannada","Movies",2020,99,599,0.5,0.9,18,5.9,0,1,0,0,"Kannada films"
26,"ReelDrama","AM Television","Guwahati","SVOD","Multi‑regional","Assamese, Bodo",2020,99,499,0.3,0.6,15,5.7,0,1,0,0,"Northeast focus"
27,"Docubay","IN10 Media","Mumbai","TVOD","Pan‑India","Documentary",2019,0,0,0.8,1.4,10,7.3,1,1,0,0,"Documentary rental"
28,"Tata Play Binge","Tata Play","Mumbai","Hybrid","Pan‑India","Aggregator",2020,249,1499,6.5,10.0,0,.,1,1,1,0,"Super‑app aggregator"
29,"Vi Movies & TV","Vodafone Idea","Mumbai","AVOD","Pan‑India","Movies, TV",2016,0,0,5.0,8.5,12,5.5,0,1,1,0,"Telco bundle"
30,"JioTV","Reliance Jio","Mumbai","AVOD","Pan‑India","Live TV",2016,0,0,60.0,90.0,0,.,0,0,1,1,"Live channels"
31,"Crunchyroll (IN)","Sony","Mumbai","SVOD","Pan‑India","Anime",2017,99,999,1.1,2.0,40,7.5,1,1,0,0,"Anime focus"
32,"BBC Player (IN)","BBC Studios","Mumbai","SVOD","Pan‑India","Drama, Docu",2023,299,1799,0.4,0.7,20,7.0,1,1,0,0,"British TV"
;
run;
proc print;run;
Output:
| Obs | Platform_ID | Name | ParentCompany | HQ_City | Model | Regional_Focus | Genres | Notes | Launch_Year_India | Price_Monthly_INR | Annual_Price_INR | Subscribers_Mn | MAUs_Mn | Originals_Count_2024 | Avg_IMDB_Originals | FourK_Support | Offline_Downloads | Ad_Tier_Flag | Sports_Rights_Flag |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | Netflix India | Netflix, Inc. | Mumbai | SVOD (Subscription) | Pan‑India | Drama, Thriller, Comedy | Premium global originals | 2016 | 649 | 4999 | 8.2 | 16.5 | 220 | 7.1 | Yes | Yes | Yes | No |
| 2 | 2 | Amazon Prime Video | Amazon | Bengaluru | SVOD (Subscription) | Pan‑India | Action, Drama, Comedy | Bundled with Prime | 2016 | 299 | 1499 | 20.5 | 35.0 | 180 | 7.0 | Yes | Yes | No | Yes |
| 3 | 3 | Disney+ Hotstar | Disney | Mumbai | Hybrid (Mix) | Hindi | Drama, Sports, Reality | Large sports slate | 2015 | 299 | 899 | 40.0 | 50.0 | 150 | 6.8 | Yes | Yes | Yes | Yes |
| 4 | 4 | SonyLIV | Sony Pictures | Mumbai | SVOD (Subscription) | Hindi | Thriller, Sports, Reality | Original thrillers | 2014 | 299 | 999 | 15.0 | 22.0 | 120 | 6.9 | Yes | Yes | Yes | Yes |
| 5 | 5 | ZEE5 | Zee Entertainment | Mumbai | Hybrid (Mix) | Multi‑regiona | Drama, Soap, Reality | Strong TV library | 2018 | 199 | 699 | 34.0 | 40.0 | 140 | 6.5 | Yes | Yes | Yes | No |
| 6 | 6 | JioCinema | Reliance | Mumbai | AVOD (Ad‑Supported) | Pan‑India | Movies, Sports | Scale via telco | 2019 | 0 | 0 | 85.0 | 120.0 | 60 | 6.0 | Yes | Yes | Yes | Yes |
| 7 | 7 | MX Player | Times Internet | Mumbai | AVOD (Ad‑Supported) | Pan‑India | Drama, Reality | High AVOD reach | 2018 | 0 | 0 | 58.0 | 95.0 | 70 | 5.9 | No | Yes | Yes | No |
| 8 | 8 | ALTBalaji/ALTT | Balaji Telefilms | Mumbai | SVOD (Subscription) | Hindi | Romance, Drama | Niche originals | 2017 | 100 | 300 | 3.2 | 6.0 | 95 | 5.8 | No | Yes | Yes | No |
| 9 | 9 | Eros Now | Eros Media | Mumbai | SVOD (Subscription) | Hindi | Movies, Music | Movie catalogue | 2012 | 99 | 399 | 12.0 | 18.0 | 85 | 6.0 | No | Yes | Yes | No |
| 10 | 10 | ShemarooMe | Shemaroo | Mumbai | SVOD (Subscription) | Multi‑regiona | Classics, Devotional | Legacy catalogue | 2019 | 149 | 799 | 4.0 | 7.5 | 45 | 6.2 | No | Yes | Yes | No |
| 11 | 11 | Sun NXT | Sun TV Network | Chennai | SVOD (Subscription) | Tamil | Movies, Serials | South focus | 2017 | 99 | 799 | 12.5 | 16.0 | 55 | 6.1 | No | Yes | Yes | No |
| 12 | 12 | Hoichoi | SVF | Kolkata | SVOD (Subscription) | Bengali | Thriller, Drama | Bengali originals | 2017 | 149 | 999 | 2.8 | 5.2 | 120 | 7.2 | No | Yes | No | No |
| 13 | 13 | Aha | Arha Media | Hyderabad | SVOD (Subscription) | Telugu | Comedy, Drama | Telugu focus | 2020 | 199 | 699 | 3.9 | 6.8 | 110 | 6.7 | No | Yes | No | No |
| 14 | 14 | Lionsgate Play | Lionsgate | Mumbai | SVOD (Subscription) | Pan‑India | Hollywood, Thriller | Premium imports | 2020 | 149 | 999 | 3.5 | 5.5 | 65 | 7.0 | Yes | Yes | Yes | No |
| 15 | 15 | Apple TV+ | Apple | Mumbai | SVOD (Subscription) | Pan‑India | Drama, Sci‑Fi | High‑quality originals | 2019 | 99 | 1499 | 1.8 | 3.0 | 45 | 7.7 | Yes | Yes | No | No |
| 16 | 16 | YouTube Premium | Hyderabad | SVOD (Subscription) | Pan‑India | Creators, Music | Ad‑free YouTube | 2018 | 139 | 1299 | 7.0 | 28.0 | 25 | 7.0 | Yes | Yes | Yes | No | |
| 17 | 17 | Discovery+ (IN) | Warner Bros. Discovery | New Delhi | SVOD (Subscription) | Pan‑India | Docu, Lifestyle | Factual + sports tie‑ins | 2020 | 199 | 399 | 4.5 | 8.0 | 35 | 7.1 | Yes | Yes | Yes | Yes |
| 18 | 18 | TVF Play | TVF | Mumbai | AVOD (Ad‑Supported) | Hindi | Comedy, Slice‑of‑life | Cult web shows | 2016 | 0 | 0 | 2.0 | 4.5 | 25 | 7.8 | No | Yes | Yes | No |
| 19 | 19 | Stage | Stage OTT | Gurugram | SVOD (Subscription) | Hindi | Haryanvi, Rajasthani | Dialect content | 2019 | 199 | 999 | 1.2 | 2.1 | 35 | 7.0 | No | Yes | No | No |
| 20 | 20 | Ullu | Ullu Digital | Mumbai | SVOD (Subscription) | Hindi | Bold, Thriller | Adult drama | 2018 | 198 | 1488 | 3.0 | 5.0 | 70 | 5.5 | No | Yes | Yes | No |
| 21 | 21 | Chaupal | Chaupal OTT | Mohali | SVOD (Subscription) | Punjabi | Movies, Serials | Punjabi focus | 2021 | 99 | 799 | 0.9 | 1.5 | 40 | 6.1 | No | Yes | No | No |
| 22 | 22 | Planet Marathi | Planet Marathi | Mumbai | SVOD (Subscription) | Marathi | Movies, Serials | Marathi focus | 2021 | 99 | 699 | 0.6 | 1.2 | 30 | 6.0 | No | Yes | No | No |
| 23 | 23 | ManoramaMAX | MM TV | Kochi | SVOD (Subscription) | Malayalam | News, Serials | Malayalam focus | 2019 | 99 | 999 | 1.5 | 2.8 | 35 | 6.2 | No | Yes | Yes | No |
| 24 | 24 | Koode | Studio Mojo | Kochi | AVOD (Ad‑Supported) | Malayalam | Movies, Serials | Malayalam AVOD | 2020 | 0 | 0 | 0.7 | 1.3 | 20 | 5.8 | No | Yes | Yes | No |
| 25 | 25 | Namma Flix | Indie | Bengaluru | SVOD (Subscription) | Kannada | Movies | Kannada films | 2020 | 99 | 599 | 0.5 | 0.9 | 18 | 5.9 | No | Yes | No | No |
| 26 | 26 | ReelDrama | AM Television | Guwahati | SVOD (Subscription) | Multi‑regiona | Assamese, Bodo | Northeast focus | 2020 | 99 | 499 | 0.3 | 0.6 | 15 | 5.7 | No | Yes | No | No |
| 27 | 27 | Docubay | IN10 Media | Mumbai | TVOD (Transactional) | Pan‑India | Documentary | Documentary rental | 2019 | 0 | 0 | 0.8 | 1.4 | 10 | 7.3 | Yes | Yes | No | No |
| 28 | 28 | Tata Play Binge | Tata Play | Mumbai | Hybrid (Mix) | Pan‑India | Aggregator | Super‑app aggregator | 2020 | 249 | 1499 | 6.5 | 10.0 | 0 | . | Yes | Yes | Yes | No |
| 29 | 29 | Vi Movies & TV | Vodafone Idea | Mumbai | AVOD (Ad‑Supported) | Pan‑India | Movies, TV | Telco bundle | 2016 | 0 | 0 | 5.0 | 8.5 | 12 | 5.5 | No | Yes | Yes | No |
| 30 | 30 | JioTV | Reliance Jio | Mumbai | AVOD (Ad‑Supported) | Pan‑India | Live TV | Live channels | 2016 | 0 | 0 | 60.0 | 90.0 | 0 | . | No | No | Yes | Yes |
| 31 | 31 | Crunchyroll (IN) | Sony | Mumbai | SVOD (Subscription) | Pan‑India | Anime | Anime focus | 2017 | 99 | 999 | 1.1 | 2.0 | 40 | 7.5 | Yes | Yes | No | No |
| 32 | 32 | BBC Player (IN) | BBC Studios | Mumbai | SVOD (Subscription) | Pan‑India | Drama, Docu | British TV | 2023 | 299 | 1799 | 0.4 | 0.7 | 20 | 7.0 | Yes | Yes | No | No |
PURPOSE: Clean and derive additional KPI fields for analysis.
data ott_india;
set ott_india_raw;
/* Defensive caps on values */
if Price_Monthly_INR < 0 then Price_Monthly_INR = .;
if Annual_Price_INR < 0 then Annual_Price_INR = .;
/* Derive effective monthly price if annual given */
Eff_Monthly_From_Annual = round(Annual_Price_INR/12, 0.1);
/* Derive price per original (avoid division by zero) */
if Originals_Count_2024 > 0 then
Price_per_Original = Annual_Price_INR / Originals_Count_2024;
else Price_per_Original = .;
/* Tenure (years since India launch; cap at 0 minimum) */
Tenure_Yrs = max(0, year(today()) - Launch_Year_India);
/* Price segment */
length Price_Segment $10;
if Price_Monthly_INR = 0 then Price_Segment = 'Free';
else if Price_Monthly_INR < 150 then Price_Segment = 'Budget';
else if Price_Monthly_INR < 300 then Price_Segment = 'Mid';
else Price_Segment = 'Premium';
run;
proc print data=ott_india;
Var Platform_ID Name ParentCompany HQ_City Price_Monthly_INR Annual_Price_INR Eff_Monthly_From_Annual Price_per_Original Tenure_Yrs Price_Segment;
run;
Output:
| Obs | Platform_ID | Name | ParentCompany | HQ_City | Price_Monthly_INR | Annual_Price_INR | Eff_Monthly_From_Annual | Price_per_Original | Tenure_Yrs | Price_Segment |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | Netflix India | Netflix, Inc. | Mumbai | 649 | 4999 | 416.6 | 22.7227 | 9 | Premium |
| 2 | 2 | Amazon Prime Video | Amazon | Bengaluru | 299 | 1499 | 124.9 | 8.3278 | 9 | Mid |
| 3 | 3 | Disney+ Hotstar | Disney | Mumbai | 299 | 899 | 74.9 | 5.9933 | 10 | Mid |
| 4 | 4 | SonyLIV | Sony Pictures | Mumbai | 299 | 999 | 83.3 | 8.3250 | 11 | Mid |
| 5 | 5 | ZEE5 | Zee Entertainment | Mumbai | 199 | 699 | 58.3 | 4.9929 | 7 | Mid |
| 6 | 6 | JioCinema | Reliance | Mumbai | 0 | 0 | 0.0 | 0.0000 | 6 | Free |
| 7 | 7 | MX Player | Times Internet | Mumbai | 0 | 0 | 0.0 | 0.0000 | 7 | Free |
| 8 | 8 | ALTBalaji/ALTT | Balaji Telefilms | Mumbai | 100 | 300 | 25.0 | 3.1579 | 8 | Budget |
| 9 | 9 | Eros Now | Eros Media | Mumbai | 99 | 399 | 33.3 | 4.6941 | 13 | Budget |
| 10 | 10 | ShemarooMe | Shemaroo | Mumbai | 149 | 799 | 66.6 | 17.7556 | 6 | Budget |
| 11 | 11 | Sun NXT | Sun TV Network | Chennai | 99 | 799 | 66.6 | 14.5273 | 8 | Budget |
| 12 | 12 | Hoichoi | SVF | Kolkata | 149 | 999 | 83.3 | 8.3250 | 8 | Budget |
| 13 | 13 | Aha | Arha Media | Hyderabad | 199 | 699 | 58.3 | 6.3545 | 5 | Mid |
| 14 | 14 | Lionsgate Play | Lionsgate | Mumbai | 149 | 999 | 83.3 | 15.3692 | 5 | Budget |
| 15 | 15 | Apple TV+ | Apple | Mumbai | 99 | 1499 | 124.9 | 33.3111 | 6 | Budget |
| 16 | 16 | YouTube Premium | Hyderabad | 139 | 1299 | 108.3 | 51.9600 | 7 | Budget | |
| 17 | 17 | Discovery+ (IN) | Warner Bros. Discovery | New Delhi | 199 | 399 | 33.3 | 11.4000 | 5 | Mid |
| 18 | 18 | TVF Play | TVF | Mumbai | 0 | 0 | 0.0 | 0.0000 | 9 | Free |
| 19 | 19 | Stage | Stage OTT | Gurugram | 199 | 999 | 83.3 | 28.5429 | 6 | Mid |
| 20 | 20 | Ullu | Ullu Digital | Mumbai | 198 | 1488 | 124.0 | 21.2571 | 7 | Mid |
| 21 | 21 | Chaupal | Chaupal OTT | Mohali | 99 | 799 | 66.6 | 19.9750 | 4 | Budget |
| 22 | 22 | Planet Marathi | Planet Marathi | Mumbai | 99 | 699 | 58.3 | 23.3000 | 4 | Budget |
| 23 | 23 | ManoramaMAX | MM TV | Kochi | 99 | 999 | 83.3 | 28.5429 | 6 | Budget |
| 24 | 24 | Koode | Studio Mojo | Kochi | 0 | 0 | 0.0 | 0.0000 | 5 | Free |
| 25 | 25 | Namma Flix | Indie | Bengaluru | 99 | 599 | 49.9 | 33.2778 | 5 | Budget |
| 26 | 26 | ReelDrama | AM Television | Guwahati | 99 | 499 | 41.6 | 33.2667 | 5 | Budget |
| 27 | 27 | Docubay | IN10 Media | Mumbai | 0 | 0 | 0.0 | 0.0000 | 6 | Free |
| 28 | 28 | Tata Play Binge | Tata Play | Mumbai | 249 | 1499 | 124.9 | . | 5 | Mid |
| 29 | 29 | Vi Movies & TV | Vodafone Idea | Mumbai | 0 | 0 | 0.0 | 0.0000 | 9 | Free |
| 30 | 30 | JioTV | Reliance Jio | Mumbai | 0 | 0 | 0.0 | . | 9 | Free |
| 31 | 31 | Crunchyroll (IN) | Sony | Mumbai | 99 | 999 | 83.3 | 24.9750 | 8 | Budget |
| 32 | 32 | BBC Player (IN) | BBC Studios | Mumbai | 299 | 1799 | 149.9 | 89.9500 | 2 | Mid |
SECTION 3: QUICK STRUCTURE & VIEWS
PURPOSE: Inspect metadata and first rows for sanity.
proc contents data=ott_india varnum; run;
Output:
The CONTENTS Procedure
| Data Set Name | WORK.OTT_INDIA | Observations | 32 |
|---|---|---|---|
| Member Type | DATA | Variables | 23 |
| Engine | V9 | Indexes | 0 |
| Created | 09/02/2025 19:08:20 | Observation Length | 360 |
| Last Modified | 09/02/2025 19:08:20 | Deleted Observations | 0 |
| Protection | Compressed | NO | |
| Data Set Type | Sorted | NO | |
| Label | |||
| Data Representation | SOLARIS_X86_64, LINUX_X86_64, ALPHA_TRU64, LINUX_IA64 | ||
| Encoding | utf-8 Unicode (UTF-8) |
| Engine/Host Dependent Information | |
|---|---|
| Data Set Page Size | 131072 |
| Number of Data Set Pages | 1 |
| First Data Page | 1 |
| Max Obs per Page | 363 |
| Obs in First Data Page | 32 |
| Number of Data Set Repairs | 0 |
| Filename | /saswork/SAS_work1511000155AC_odaws01-apse1-2.oda.sas.com/SAS_work4C11000155AC_odaws01-apse1-2.oda.sas.com/ott_india.sas7bdat |
| Release Created | 9.0401M8 |
| Host Created | Linux |
| Inode Number | 1082209 |
| Access Permission | rw-r--r-- |
| Owner Name | u63247146 |
| File Size | 256KB |
| File Size (bytes) | 262144 |
| Variables in Creation Order | |||||
|---|---|---|---|---|---|
| # | Variable | Type | Len | Format | Label |
| 1 | Platform_ID | Num | 8 | ||
| 2 | Name | Char | 40 | Platform Name | |
| 3 | ParentCompany | Char | 40 | Parent Company | |
| 4 | HQ_City | Char | 20 | HQ (India) | |
| 5 | Model | Char | 10 | $MODEL. | Business Model |
| 6 | Regional_Focus | Char | 15 | $REGION. | Regional Focus |
| 7 | Genres | Char | 40 | Popular Genres | |
| 8 | Notes | Char | 60 | ||
| 9 | Launch_Year_India | Num | 8 | Launch Year (India) | |
| 10 | Price_Monthly_INR | Num | 8 | Monthly Price (INR) | |
| 11 | Annual_Price_INR | Num | 8 | Annual Price (INR) | |
| 12 | Subscribers_Mn | Num | 8 | Subscribers (Mn, India est) | |
| 13 | MAUs_Mn | Num | 8 | Monthly Active Users (Mn) | |
| 14 | Originals_Count_2024 | Num | 8 | Originals Count (till 2024) | |
| 15 | Avg_IMDB_Originals | Num | 8 | Avg IMDb of Originals | |
| 16 | FourK_Support | Num | 8 | YESNO. | 4K Support |
| 17 | Offline_Downloads | Num | 8 | YESNO. | Offline Downloads |
| 18 | Ad_Tier_Flag | Num | 8 | YESNO. | Has Ad Tier |
| 19 | Sports_Rights_Flag | Num | 8 | YESNO. | Sports Rights |
| 20 | Eff_Monthly_From_Annual | Num | 8 | ||
| 21 | Price_per_Original | Num | 8 | ||
| 22 | Tenure_Yrs | Num | 8 | ||
| 23 | Price_Segment | Char | 10 | ||
proc sort data=ott_india out=ott_sorted;
by Model descending Subscribers_Mn;
run;
proc print data=ott_sorted (obs=12);
Var Platform_ID Name ParentCompany HQ_City Model descending Subscribers_Mn;
title 'Top 12 Rows by Model and Subscribers';
run; title;
Output:
| Obs | Platform_ID | Name | ParentCompany | HQ_City | Model | Subscribers_Mn |
|---|---|---|---|---|---|---|
| 1 | 6 | JioCinema | Reliance | Mumbai | AVOD (Ad‑Supported) | 85.0 |
| 2 | 30 | JioTV | Reliance Jio | Mumbai | AVOD (Ad‑Supported) | 60.0 |
| 3 | 7 | MX Player | Times Internet | Mumbai | AVOD (Ad‑Supported) | 58.0 |
| 4 | 29 | Vi Movies & TV | Vodafone Idea | Mumbai | AVOD (Ad‑Supported) | 5.0 |
| 5 | 18 | TVF Play | TVF | Mumbai | AVOD (Ad‑Supported) | 2.0 |
| 6 | 24 | Koode | Studio Mojo | Kochi | AVOD (Ad‑Supported) | 0.7 |
| 7 | 3 | Disney+ Hotstar | Disney | Mumbai | Hybrid (Mix) | 40.0 |
| 8 | 5 | ZEE5 | Zee Entertainment | Mumbai | Hybrid (Mix) | 34.0 |
| 9 | 28 | Tata Play Binge | Tata Play | Mumbai | Hybrid (Mix) | 6.5 |
| 10 | 2 | Amazon Prime Video | Amazon | Bengaluru | SVOD (Subscription) | 20.5 |
| 11 | 4 | SonyLIV | Sony Pictures | Mumbai | SVOD (Subscription) | 15.0 |
| 12 | 11 | Sun NXT | Sun TV Network | Chennai | SVOD (Subscription) | 12.5 |
PURPOSE: Frequency cuts for categorical distribution.
proc freq data=ott_india;
tables Model Regional_Focus Price_Segment / nocum;
tables Model*Regional_Focus / nocol norow nopercent;
run;
Output:
The FREQ Procedure
| Business Model | ||
|---|---|---|
| Model | Frequency | Percent |
| AVOD (Ad‑Supported) | 6 | 18.75 |
| Hybrid (Mix) | 3 | 9.38 |
| SVOD (Subscription) | 22 | 68.75 |
| TVOD (Transactional) | 1 | 3.13 |
| Regional Focus | ||
|---|---|---|
| Regional_Focus | Frequency | Percent |
| Bengali | 1 | 3.13 |
| Hindi | 7 | 21.88 |
| Kannada | 1 | 3.13 |
| Malayalam | 2 | 6.25 |
| Marathi | 1 | 3.13 |
| Multi‑regiona | 3 | 9.38 |
| Pan‑India | 14 | 43.75 |
| Punjabi | 1 | 3.13 |
| Tamil | 1 | 3.13 |
| Telugu | 1 | 3.13 |
| Price_Segment | Frequency | Percent |
|---|---|---|
| Budget | 14 | 43.75 |
| Free | 7 | 21.88 |
| Mid | 10 | 31.25 |
| Premium | 1 | 3.13 |
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PURPOSE: Descriptive stats for price & scale variables.
proc means data=ott_india n mean std min p25 median p75 max maxdec=1;
var Price_Monthly_INR Annual_Price_INR Subscribers_Mn MAUs_Mn Originals_Count_2024 Avg_IMDB_Originals;
class Model;
run;
Output:
The MEANS Procedure
| Business Model | N Obs | Variable | Label | N | Mean | Std Dev | Minimum | 25th Pctl | Median | 75th Pctl | Maximum |
|---|---|---|---|---|---|---|---|---|---|---|---|
| AVOD (Ad‑Supported) | 6 | Price_Monthly_INR Annual_Price_INR Subscribers_Mn MAUs_Mn Originals_Count_2024 Avg_IMDB_Originals | Monthly Price (INR) Annual Price (INR) Subscribers (Mn, India est) Monthly Active Users (Mn) Originals Count (till 2024) Avg IMDb of Originals | 6 6 6 6 6 5 | 0.0 0.0 35.1 53.2 31.2 6.2 | 0.0 0.0 36.9 54.1 27.7 0.9 | 0.0 0.0 0.7 1.3 0.0 5.5 | 0.0 0.0 2.0 4.5 12.0 5.8 | 0.0 0.0 31.5 49.3 22.5 5.9 | 0.0 0.0 60.0 95.0 60.0 6.0 | 0.0 0.0 85.0 120.0 70.0 7.8 |
| Hybrid (Mix) | 3 | Price_Monthly_INR Annual_Price_INR Subscribers_Mn MAUs_Mn Originals_Count_2024 Avg_IMDB_Originals | Monthly Price (INR) Annual Price (INR) Subscribers (Mn, India est) Monthly Active Users (Mn) Originals Count (till 2024) Avg IMDb of Originals | 3 3 3 3 3 2 | 249.0 1032.3 26.8 33.3 96.7 6.7 | 50.0 416.3 17.9 20.8 83.9 0.2 | 199.0 699.0 6.5 10.0 0.0 6.5 | 199.0 699.0 6.5 10.0 0.0 6.5 | 249.0 899.0 34.0 40.0 140.0 6.7 | 299.0 1499.0 40.0 50.0 150.0 6.8 | 299.0 1499.0 40.0 50.0 150.0 6.8 |
| SVOD (Subscription) | 22 | Price_Monthly_INR Annual_Price_INR Subscribers_Mn MAUs_Mn Originals_Count_2024 Avg_IMDB_Originals | Monthly Price (INR) Annual Price (INR) Subscribers (Mn, India est) Monthly Active Users (Mn) Originals Count (till 2024) Avg IMDb of Originals | 22 22 22 22 22 22 | 178.1 1116.7 4.9 8.8 68.3 6.6 | 126.1 953.3 5.5 9.6 53.8 0.6 | 99.0 300.0 0.3 0.6 15.0 5.5 | 99.0 699.0 1.1 2.0 35.0 6.0 | 144.0 999.0 3.1 5.4 45.0 6.8 | 199.0 1299.0 7.0 16.0 95.0 7.0 | 649.0 4999.0 20.5 35.0 220.0 7.7 |
| TVOD (Transactional) | 1 | Price_Monthly_INR Annual_Price_INR Subscribers_Mn MAUs_Mn Originals_Count_2024 Avg_IMDB_Originals | Monthly Price (INR) Annual Price (INR) Subscribers (Mn, India est) Monthly Active Users (Mn) Originals Count (till 2024) Avg IMDb of Originals | 1 1 1 1 1 1 | 0.0 0.0 0.8 1.4 10.0 7.3 | . . . . . . | 0.0 0.0 0.8 1.4 10.0 7.3 | 0.0 0.0 0.8 1.4 10.0 7.3 | 0.0 0.0 0.8 1.4 10.0 7.3 | 0.0 0.0 0.8 1.4 10.0 7.3 | 0.0 0.0 0.8 1.4 10.0 7.3 |
PURPOSE: Summarize by region/model to get totals and averages.
proc summary data=ott_india nway;
class Regional_Focus Model;
var Subscribers_Mn MAUs_Mn Annual_Price_INR Originals_Count_2024;
output out=agg_region_model (drop=_type_ _freq_) sum= / autoname;
run;
proc print data=agg_region_model;run;
Output:
| Obs | Regional_Focus | Model | Subscribers_Mn_Sum | MAUs_Mn_Sum | Annual_Price_INR_Sum | Originals_Count_2024_Sum |
|---|---|---|---|---|---|---|
| 1 | Bengali | SVOD (Subscription) | 2.8 | 5.2 | 999 | 120 |
| 2 | Hindi | AVOD (Ad‑Supported) | 2.0 | 4.5 | 0 | 25 |
| 3 | Hindi | Hybrid (Mix) | 40.0 | 50.0 | 899 | 150 |
| 4 | Hindi | SVOD (Subscription) | 34.4 | 53.1 | 4185 | 405 |
| 5 | Kannada | SVOD (Subscription) | 0.5 | 0.9 | 599 | 18 |
| 6 | Malayalam | AVOD (Ad‑Supported) | 0.7 | 1.3 | 0 | 20 |
| 7 | Malayalam | SVOD (Subscription) | 1.5 | 2.8 | 999 | 35 |
| 8 | Marathi | SVOD (Subscription) | 0.6 | 1.2 | 699 | 30 |
| 9 | Multi‑regiona | Hybrid (Mix) | 34.0 | 40.0 | 699 | 140 |
| 10 | Multi‑regiona | SVOD (Subscription) | 4.3 | 8.1 | 1298 | 60 |
| 11 | Pan‑India | AVOD (Ad‑Supported) | 208.0 | 313.5 | 0 | 142 |
| 12 | Pan‑India | Hybrid (Mix) | 6.5 | 10.0 | 1499 | 0 |
| 13 | Pan‑India | SVOD (Subscription) | 47.0 | 98.7 | 13492 | 630 |
| 14 | Pan‑India | TVOD (Transactional) | 0.8 | 1.4 | 0 | 10 |
| 15 | Punjabi | SVOD (Subscription) | 0.9 | 1.5 | 799 | 40 |
| 16 | Tamil | SVOD (Subscription) | 12.5 | 16.0 | 799 | 55 |
| 17 | Telugu | SVOD (Subscription) | 3.9 | 6.8 | 699 | 110 |
PURPOSE: Distribution checks for price and ratings.
proc univariate data=ott_india;
var Price_Monthly_INR Annual_Price_INR Avg_IMDB_Originals;
histogram Price_Monthly_INR Annual_Price_INR Avg_IMDB_Originals;
inset n mean std p5 p95 / pos=ne;
run;
Output:
The UNIVARIATE Procedure
Variable: Price_Monthly_INR (Monthly Price (INR))
| Moments | |||
|---|---|---|---|
| N | 32 | Sum Weights | 32 |
| Mean | 145.78125 | Sum Observations | 4665 |
| Std Deviation | 132.284818 | Variance | 17499.2732 |
| Skewness | 1.79792103 | Kurtosis | 5.59714236 |
| Uncorrected SS | 1222547 | Corrected SS | 542477.469 |
| Coeff Variation | 90.7419976 | Std Error Mean | 23.384873 |
| Basic Statistical Measures | |||
|---|---|---|---|
| Location | Variability | ||
| Mean | 145.7813 | Std Deviation | 132.28482 |
| Median | 99.5000 | Variance | 17499 |
| Mode | 99.0000 | Range | 649.00000 |
| Interquartile Range | 100.00000 | ||
| Tests for Location: Mu0=0 | ||||
|---|---|---|---|---|
| Test | Statistic | p Value | ||
| Student's t | t | 6.233998 | Pr > |t| | <.0001 |
| Sign | M | 12.5 | Pr >= |M| | <.0001 |
| Signed Rank | S | 162.5 | Pr >= |S| | <.0001 |
| Quantiles (Definition 5) | |
|---|---|
| Level | Quantile |
| 100% Max | 649.0 |
| 99% | 649.0 |
| 95% | 299.0 |
| 90% | 299.0 |
| 75% Q3 | 199.0 |
| 50% Median | 99.5 |
| 25% Q1 | 99.0 |
| 10% | 0.0 |
| 5% | 0.0 |
| 1% | 0.0 |
| 0% Min | 0.0 |
| Extreme Observations | |||
|---|---|---|---|
| Lowest | Highest | ||
| Value | Obs | Value | Obs |
| 0 | 30 | 299 | 2 |
| 0 | 29 | 299 | 3 |
| 0 | 27 | 299 | 4 |
| 0 | 24 | 299 | 32 |
| 0 | 18 | 649 | 1 |
The UNIVARIATE Procedure
The UNIVARIATE Procedure
Variable: Annual_Price_INR (Annual Price (INR))
| Moments | |||
|---|---|---|---|
| N | 32 | Sum Weights | 32 |
| Mean | 864.53125 | Sum Observations | 27665 |
| Std Deviation | 918.363024 | Variance | 843390.644 |
| Skewness | 3.00347329 | Kurtosis | 13.0771025 |
| Uncorrected SS | 50062367 | Corrected SS | 26145110 |
| Coeff Variation | 106.226701 | Std Error Mean | 162.34518 |
| Basic Statistical Measures | |||
|---|---|---|---|
| Location | Variability | ||
| Mean | 864.5313 | Std Deviation | 918.36302 |
| Median | 799.0000 | Variance | 843391 |
| Mode | 0.0000 | Range | 4999 |
| Interquartile Range | 649.50000 | ||
| Tests for Location: Mu0=0 | ||||
|---|---|---|---|---|
| Test | Statistic | p Value | ||
| Student's t | t | 5.325266 | Pr > |t| | <.0001 |
| Sign | M | 12.5 | Pr >= |M| | <.0001 |
| Signed Rank | S | 162.5 | Pr >= |S| | <.0001 |
| Quantiles (Definition 5) | |
|---|---|
| Level | Quantile |
| 100% Max | 4999.0 |
| 99% | 4999.0 |
| 95% | 1799.0 |
| 90% | 1499.0 |
| 75% Q3 | 999.0 |
| 50% Median | 799.0 |
| 25% Q1 | 349.5 |
| 10% | 0.0 |
| 5% | 0.0 |
| 1% | 0.0 |
| 0% Min | 0.0 |
| Extreme Observations | |||
|---|---|---|---|
| Lowest | Highest | ||
| Value | Obs | Value | Obs |
| 0 | 30 | 1499 | 2 |
| 0 | 29 | 1499 | 15 |
| 0 | 27 | 1499 | 28 |
| 0 | 24 | 1799 | 32 |
| 0 | 18 | 4999 | 1 |
The UNIVARIATE Procedure
The UNIVARIATE Procedure
Variable: Avg_IMDB_Originals (Avg IMDb of Originals)
| Moments | |||
|---|---|---|---|
| N | 30 | Sum Weights | 30 |
| Mean | 6.54333333 | Sum Observations | 196.3 |
| Std Deviation | 0.67091463 | Variance | 0.45012644 |
| Skewness | 0.1284044 | Kurtosis | -1.1890157 |
| Uncorrected SS | 1297.51 | Corrected SS | 13.0536667 |
| Coeff Variation | 10.2534074 | Std Error Mean | 0.12249169 |
| Basic Statistical Measures | |||
|---|---|---|---|
| Location | Variability | ||
| Mean | 6.543333 | Std Deviation | 0.67091 |
| Median | 6.600000 | Variance | 0.45013 |
| Mode | 7.000000 | Range | 2.30000 |
| Interquartile Range | 1.00000 | ||
| Tests for Location: Mu0=0 | ||||
|---|---|---|---|---|
| Test | Statistic | p Value | ||
| Student's t | t | 53.41859 | Pr > |t| | <.0001 |
| Sign | M | 15 | Pr >= |M| | <.0001 |
| Signed Rank | S | 232.5 | Pr >= |S| | <.0001 |
| Quantiles (Definition 5) | |
|---|---|
| Level | Quantile |
| 100% Max | 7.80 |
| 99% | 7.80 |
| 95% | 7.70 |
| 90% | 7.40 |
| 75% Q3 | 7.00 |
| 50% Median | 6.60 |
| 25% Q1 | 6.00 |
| 10% | 5.75 |
| 5% | 5.50 |
| 1% | 5.50 |
| 0% Min | 5.50 |
| Extreme Observations | |||
|---|---|---|---|
| Lowest | Highest | ||
| Value | Obs | Value | Obs |
| 5.5 | 29 | 7.2 | 12 |
| 5.5 | 20 | 7.3 | 27 |
| 5.7 | 26 | 7.5 | 31 |
| 5.8 | 24 | 7.7 | 15 |
| 5.8 | 8 | 7.8 | 18 |
| Missing Values | |||
|---|---|---|---|
| Missing Value | Count | Percent Of | |
| All Obs | Missing Obs | ||
| . | 2 | 6.25 | 100.00 |
The UNIVARIATE Procedure
PURPOSE: High‑level business table for leadership decks.
proc tabulate data=ott_india format=8.1;
class Model Price_Segment;
var Subscribers_Mn MAUs_Mn Annual_Price_INR Originals_Count_2024;
table Model all,
(Subscribers_Mn MAUs_Mn Originals_Count_2024)*(mean sum) Annual_Price_INR*mean
* (Price_Segment all);
run;
Output:
| Subscribers (Mn, India est) | Monthly Active Users (Mn) | Originals Count (till 2024) | Annual Price (INR) | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Mean | |||||||||||
| Price_Segment | All | ||||||||||
| Mean | Sum | Mean | Sum | Mean | Sum | Budget | Free | Mid | Premium | ||
| Business Model | 35.1 | 210.7 | 53.2 | 319.3 | 31.2 | 187.0 | . | 0.0 | . | . | 0.0 |
| AVOD (Ad‑Supported) | |||||||||||
| Hybrid (Mix) | 26.8 | 80.5 | 33.3 | 100.0 | 96.7 | 290.0 | . | . | 1032.3 | . | 1032.3 |
| SVOD (Subscription) | 4.9 | 108.4 | 8.8 | 194.3 | 68.3 | 1503.0 | 834.8 | . | 1126.0 | 4999.0 | 1116.7 |
| TVOD (Transactional) | 0.8 | 0.8 | 1.4 | 1.4 | 10.0 | 10.0 | . | 0.0 | . | . | 0.0 |
| All | 12.5 | 400.4 | 19.2 | 615.0 | 62.2 | 1990.0 | 834.8 | 0.0 | 1097.9 | 4999.0 | 864.5 |
PURPOSE: Executive report with computed KPIs.
proc report data=ott_india nowd;
column Name Model Regional_Focus Subscribers_Mn MAUs_Mn Annual_Price_INR Originals_Count_2024 Price_per_Original Tenure_Yrs;
define Name / display;
define Model / group;
define Regional_Focus / group;
define Subscribers_Mn / analysis mean format=8.1 'Subs (Mn)';
define MAUs_Mn / analysis mean format=8.1 'MAUs (Mn)';
define Annual_Price_INR / analysis mean format=8. 'Avg Annual INR';
define Originals_Count_2024 / analysis mean 'Originals';
define Price_per_Original / computed format=8.1 'INR per Original';
define Tenure_Yrs / analysis mean 'Tenure (yrs)';
compute Price_per_Original;
Price_per_Original = _c6_ / max(_c7_,1);
endcomp;
run;
Output:
| Platform Name | Business Model | Regional Focus | Subs (Mn) | MAUs (Mn) | Avg Annual INR | Originals | INR per Original | Tenure (yrs) |
|---|---|---|---|---|---|---|---|---|
| TVF Play | AVOD (Ad‑Supported) | Hindi | 2.0 | 4.5 | 0 | 25 | 0.0 | 9 |
| Koode | Malayalam | 0.7 | 1.3 | 0 | 20 | 0.0 | 5 | |
| JioCinema | Pan‑India | 85.0 | 120.0 | 0 | 60 | 0.0 | 6 | |
| MX Player | 58.0 | 95.0 | 0 | 70 | 0.0 | 7 | ||
| Vi Movies & TV | 5.0 | 8.5 | 0 | 12 | 0.0 | 9 | ||
| JioTV | 60.0 | 90.0 | 0 | 0 | 0.0 | 9 | ||
| Disney+ Hotstar | Hybrid (Mix) | Hindi | 40.0 | 50.0 | 899 | 150 | 6.0 | 10 |
| ZEE5 | Multi‑regiona | 34.0 | 40.0 | 699 | 140 | 5.0 | 7 | |
| Tata Play Binge | Pan‑India | 6.5 | 10.0 | 1499 | 0 | 1499.0 | 5 | |
| Hoichoi | SVOD (Subscription) | Bengali | 2.8 | 5.2 | 999 | 120 | 8.3 | 8 |
| SonyLIV | Hindi | 15.0 | 22.0 | 999 | 120 | 8.3 | 11 | |
| ALTBalaji/ALTT | 3.2 | 6.0 | 300 | 95 | 3.2 | 8 | ||
| Eros Now | 12.0 | 18.0 | 399 | 85 | 4.7 | 13 | ||
| Stage | 1.2 | 2.1 | 999 | 35 | 28.5 | 6 | ||
| Ullu | 3.0 | 5.0 | 1488 | 70 | 21.3 | 7 | ||
| Namma Flix | Kannada | 0.5 | 0.9 | 599 | 18 | 33.3 | 5 | |
| ManoramaMAX | Malayalam | 1.5 | 2.8 | 999 | 35 | 28.5 | 6 | |
| Planet Marathi | Marathi | 0.6 | 1.2 | 699 | 30 | 23.3 | 4 | |
| ShemarooMe | Multi‑regiona | 4.0 | 7.5 | 799 | 45 | 17.8 | 6 | |
| ReelDrama | 0.3 | 0.6 | 499 | 15 | 33.3 | 5 | ||
| Netflix India | Pan‑India | 8.2 | 16.5 | 4999 | 220 | 22.7 | 9 | |
| Amazon Prime Video | 20.5 | 35.0 | 1499 | 180 | 8.3 | 9 | ||
| Lionsgate Play | 3.5 | 5.5 | 999 | 65 | 15.4 | 5 | ||
| Apple TV+ | 1.8 | 3.0 | 1499 | 45 | 33.3 | 6 | ||
| YouTube Premium | 7.0 | 28.0 | 1299 | 25 | 52.0 | 7 | ||
| Discovery+ (IN) | 4.5 | 8.0 | 399 | 35 | 11.4 | 5 | ||
| Crunchyroll (IN) | 1.1 | 2.0 | 999 | 40 | 25.0 | 8 | ||
| BBC Player (IN) | 0.4 | 0.7 | 1799 | 20 | 90.0 | 2 | ||
| Chaupal | Punjabi | 0.9 | 1.5 | 799 | 40 | 20.0 | 4 | |
| Sun NXT | Tamil | 12.5 | 16.0 | 799 | 55 | 14.5 | 8 | |
| Aha | Telugu | 3.9 | 6.8 | 699 | 110 | 6.4 | 5 | |
| Docubay | TVOD (Transactional) | Pan‑India | 0.8 | 1.4 | 0 | 10 | 0.0 | 6 |
PURPOSE: Pivot a quick matrix of model vs 4K support counts.
proc freq data=ott_india noprint;
tables Model*FourK_Support / out=freq_4k (drop=percent);
run;
proc transpose data=freq_4k out=pivot_4k prefix=FourK_;
by Model;
id FourK_Support;
var count;
run;
proc print data=pivot_4k;run;
Output:
| Obs | Model | _NAME_ | _LABEL_ | FourK_No | FourK_Yes |
|---|---|---|---|---|---|
| 1 | AVOD (Ad‑Supported) | COUNT | Frequency Count | 5 | 1 |
| 2 | Hybrid (Mix) | COUNT | Frequency Count | . | 3 |
| 3 | SVOD (Subscription) | COUNT | Frequency Count | 13 | 9 |
| 4 | TVOD (Transactional) | COUNT | Frequency Count | . | 1 |
SECTION 4: SQL ANALYSIS
PURPOSE: Use PROC SQL for joins, views, windows, and filters.
/*Compute total subs per model */
proc sql;
create table model_totals as
select Model, sum(Subscribers_Mn) as Total_Model_Subs
from ott_india
group by Model;
quit;
proc print data=model_totals;
run;
Output:
| Obs | Model | Total_Model_Subs |
|---|---|---|
| 1 | AVOD (Ad‑Supported) | 210.7 |
| 2 | Hybrid (Mix) | 80.5 |
| 3 | SVOD (Subscription) | 108.4 |
| 4 | TVOD (Transactional) | 0.8 |
/* Join back to compute share */
proc sql;
create table model_shares as
select a.Name, a.Model, a.Subscribers_Mn,
b.Total_Model_Subs,
case
when b.Total_Model_Subs>0
then a.Subscribers_Mn / b.Total_Model_Subs
else .
end as Share_in_Model format=percent8.2
from ott_india as a
left join model_totals as b
on a.Model=b.Model;
quit;
proc print data=model_shares(obs=10);
run;
Output:
| Obs | Name | Model | Subscribers_Mn | Total_Model_Subs | Share_in_Model |
|---|---|---|---|---|---|
| 1 | JioCinema | AVOD (Ad‑Supported) | 85.0 | 210.7 | 40.34% |
| 2 | Koode | AVOD (Ad‑Supported) | 0.7 | 210.7 | 0.33% |
| 3 | TVF Play | AVOD (Ad‑Supported) | 2.0 | 210.7 | 0.95% |
| 4 | Vi Movies & TV | AVOD (Ad‑Supported) | 5.0 | 210.7 | 2.37% |
| 5 | MX Player | AVOD (Ad‑Supported) | 58.0 | 210.7 | 27.53% |
| 6 | JioTV | AVOD (Ad‑Supported) | 60.0 | 210.7 | 28.48% |
| 7 | Tata Play Binge | Hybrid (Mix) | 6.5 | 80.5 | 8.07% |
| 8 | ZEE5 | Hybrid (Mix) | 34.0 | 80.5 | 42.24% |
| 9 | Disney+ Hotstar | Hybrid (Mix) | 40.0 | 80.5 | 49.69% |
| 10 | Lionsgate Play | SVOD (Subscription) | 3.5 | 108.4 | 3.23% |
SECTION 5: RANKING & VISUALS
PURPOSE: Rank platforms by subscribers within model and overall.
proc rank data=ott_india out=ranked ties=low descending;
var Subscribers_Mn;
ranks Rank_Overall;
run;
proc sort data=ott_india out=tmp_model;
by Model;
run;
proc rank data=tmp_model out=ranked_by_model ties=low descending;
by Model;
var Subscribers_Mn;
ranks Rank_in_Model;
run;
proc print data=ranked_by_model(obs=10);
var Platform_ID Name ParentCompany HQ_City Model Subscribers_Mn Rank_in_Model ;
run;
Output:
| Obs | Platform_ID | Name | ParentCompany | HQ_City | Model | Subscribers_Mn | Rank_in_Model |
|---|---|---|---|---|---|---|---|
| 1 | 6 | JioCinema | Reliance | Mumbai | AVOD (Ad‑Supported) | 85.0 | 1 |
| 2 | 7 | MX Player | Times Internet | Mumbai | AVOD (Ad‑Supported) | 58.0 | 3 |
| 3 | 18 | TVF Play | TVF | Mumbai | AVOD (Ad‑Supported) | 2.0 | 5 |
| 4 | 24 | Koode | Studio Mojo | Kochi | AVOD (Ad‑Supported) | 0.7 | 6 |
| 5 | 29 | Vi Movies & TV | Vodafone Idea | Mumbai | AVOD (Ad‑Supported) | 5.0 | 4 |
| 6 | 30 | JioTV | Reliance Jio | Mumbai | AVOD (Ad‑Supported) | 60.0 | 2 |
| 7 | 3 | Disney+ Hotstar | Disney | Mumbai | Hybrid (Mix) | 40.0 | 1 |
| 8 | 5 | ZEE5 | Zee Entertainment | Mumbai | Hybrid (Mix) | 34.0 | 2 |
| 9 | 28 | Tata Play Binge | Tata Play | Mumbai | Hybrid (Mix) | 6.5 | 3 |
| 10 | 1 | Netflix India | Netflix, Inc. | Mumbai | SVOD (Subscription) | 8.2 | 5 |
PURPOSE: Simple bar charts for leadership (requires SAS/GRAPH or ODS Graphics).
ods graphics on;
proc sgplot data=ott_india;
vbar Model / response=Subscribers_Mn stat=sum datalabel;
title 'Total Subscribers by Model';
run; title;
Output:
proc sgplot data=ott_india;
vbar Regional_Focus / response=MAUs_Mn stat=sum datalabel;
title 'MAUs by Regional Focus';
run; title; ods graphics off;
Output:
SECTION 6: DATA QUALITY & UTILITIES
PURPOSE: Macro toolkit for common analytics workflows.
PURPOSE (macro): Append one new OTT row to an existing dataset.
%macro add_ott(ds=ott_india,
Platform_ID=., Name=, ParentCompany=, HQ_City=, Model=, Regional_Focus=,
Genres=, Launch_Year_India=., Price_Monthly_INR=., Annual_Price_INR=.,
Subscribers_Mn=., MAUs_Mn=., Originals_Count_2024=., Avg_IMDB_Originals=.,
FourK_Support=0, Offline_Downloads=0, Ad_Tier_Flag=0, Sports_Rights_Flag=0,
Notes=);
data &ds.;
set &ds. end=eof;
output;
if eof then do;
Platform_ID=&Platform_ID.; Name="&Name."; ParentCompany="&ParentCompany."; HQ_City="&HQ_City.";
Model="&Model."; Regional_Focus="&Regional_Focus."; Genres="&Genres.";
Launch_Year_India=&Launch_Year_India.; Price_Monthly_INR=&Price_Monthly_INR.; Annual_Price_INR=&Annual_Price_INR.;
Subscribers_Mn=&Subscribers_Mn.; MAUs_Mn=&MAUs_Mn.; Originals_Count_2024=&Originals_Count_2024.; Avg_IMDB_Originals=&Avg_IMDB_Originals.;
FourK_Support=&FourK_Support.; Offline_Downloads=&Offline_Downloads.; Ad_Tier_Flag=&Ad_Tier_Flag.; Sports_Rights_Flag=&Sports_Rights_Flag.;
Notes="&Notes.";
Re‑compute derived fields
Eff_Monthly_From_Annual = round(Annual_Price_INR/12,0.1);
if Originals_Count_2024>0 then Price_per_Original = Annual_Price_INR / Originals_Count_2024; else Price_per_Original = .;
Tenure_Yrs = max(0, year(today()) - Launch_Year_India);
if Price_Monthly_INR=0 then Price_Segment='Free';
else if Price_Monthly_INR<150 then Price_Segment='Budget';
else if Price_Monthly_INR<300 then Price_Segment='Mid';
else Price_Segment='Premium';
output;
end;
run;
proc print data=&ds.(obs=10);
run;
%mend;
%add_ott(ds=ott_india, Platform_ID=33, Name=NewRegionalOTT, ParentCompany=StartUp, HQ_City=Indore,
Model=SVOD, Regional_Focus=Hindi, Genres=Drama, Launch_Year_India=2024,
Price_Monthly_INR=129, Annual_Price_INR=899, Subscribers_Mn=0.2, MAUs_Mn=0.5,
Originals_Count_2024=10, Avg_IMDB_Originals=6.3, FourK_Support=0, Offline_Downloads=1, Ad_Tier_Flag=1, Sports_Rights_Flag=0,
Notes=Pilot);
Output:
| Obs | Platform_ID | Name | ParentCompany | HQ_City | Model | Regional_Focus | Genres | Notes | Launch_Year_India | Price_Monthly_INR | Annual_Price_INR | Subscribers_Mn | MAUs_Mn | Originals_Count_2024 | Avg_IMDB_Originals | FourK_Support | Offline_Downloads | Ad_Tier_Flag | Sports_Rights_Flag | Eff_Monthly_From_Annual | Price_per_Original | Tenure_Yrs | Price_Segment |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | Netflix India | Netflix, Inc. | Mumbai | SVOD (Subscription) | Pan‑India | Drama, Thriller, Comedy | Premium global originals | 2016 | 649 | 4999 | 8.2 | 16.5 | 220 | 7.1 | Yes | Yes | Yes | No | 416.6 | 22.7227 | 9 | Premium |
| 2 | 2 | Amazon Prime Video | Amazon | Bengaluru | SVOD (Subscription) | Pan‑India | Action, Drama, Comedy | Bundled with Prime | 2016 | 299 | 1499 | 20.5 | 35.0 | 180 | 7.0 | Yes | Yes | No | Yes | 124.9 | 8.3278 | 9 | Mid |
| 3 | 3 | Disney+ Hotstar | Disney | Mumbai | Hybrid (Mix) | Hindi | Drama, Sports, Reality | Large sports slate | 2015 | 299 | 899 | 40.0 | 50.0 | 150 | 6.8 | Yes | Yes | Yes | Yes | 74.9 | 5.9933 | 10 | Mid |
| 4 | 4 | SonyLIV | Sony Pictures | Mumbai | SVOD (Subscription) | Hindi | Thriller, Sports, Reality | Original thrillers | 2014 | 299 | 999 | 15.0 | 22.0 | 120 | 6.9 | Yes | Yes | Yes | Yes | 83.3 | 8.3250 | 11 | Mid |
| 5 | 5 | ZEE5 | Zee Entertainment | Mumbai | Hybrid (Mix) | Multi‑regiona | Drama, Soap, Reality | Strong TV library | 2018 | 199 | 699 | 34.0 | 40.0 | 140 | 6.5 | Yes | Yes | Yes | No | 58.3 | 4.9929 | 7 | Mid |
| 6 | 6 | JioCinema | Reliance | Mumbai | AVOD (Ad‑Supported) | Pan‑India | Movies, Sports | Scale via telco | 2019 | 0 | 0 | 85.0 | 120.0 | 60 | 6.0 | Yes | Yes | Yes | Yes | 0.0 | 0.0000 | 6 | Free |
| 7 | 7 | MX Player | Times Internet | Mumbai | AVOD (Ad‑Supported) | Pan‑India | Drama, Reality | High AVOD reach | 2018 | 0 | 0 | 58.0 | 95.0 | 70 | 5.9 | No | Yes | Yes | No | 0.0 | 0.0000 | 7 | Free |
| 8 | 8 | ALTBalaji/ALTT | Balaji Telefilms | Mumbai | SVOD (Subscription) | Hindi | Romance, Drama | Niche originals | 2017 | 100 | 300 | 3.2 | 6.0 | 95 | 5.8 | No | Yes | Yes | No | 25.0 | 3.1579 | 8 | Budget |
| 9 | 9 | Eros Now | Eros Media | Mumbai | SVOD (Subscription) | Hindi | Movies, Music | Movie catalogue | 2012 | 99 | 399 | 12.0 | 18.0 | 85 | 6.0 | No | Yes | Yes | No | 33.3 | 4.6941 | 13 | Budget |
| 10 | 10 | ShemarooMe | Shemaroo | Mumbai | SVOD (Subscription) | Multi‑regiona | Classics, Devotional | Legacy catalogue | 2019 | 149 | 799 | 4.0 | 7.5 | 45 | 6.2 | No | Yes | Yes | No | 66.6 | 17.7556 | 6 | Budget |
PURPOSE (macro): Quick profile (structure + univariate + basic frequencies).
%macro quick_profile(ds=ott_india);
proc contents data=&ds. varnum; run;
proc means data=&ds. n mean std min median p95 max; var Price_Monthly_INR Annual_Price_INR Subscribers_Mn MAUs_Mn; run;
proc freq data=&ds.; tables Model*Price_Segment / nopercent nocol norow; run;
%mend;
%quick_profile(ds=ott_india);
Output:
The CONTENTS Procedure
| Data Set Name | WORK.OTT_INDIA | Observations | 34 |
|---|---|---|---|
| Member Type | DATA | Variables | 23 |
| Engine | V9 | Indexes | 0 |
| Created | 09/02/2025 19:55:23 | Observation Length | 360 |
| Last Modified | 09/02/2025 19:55:23 | Deleted Observations | 0 |
| Protection | Compressed | NO | |
| Data Set Type | Sorted | NO | |
| Label | |||
| Data Representation | SOLARIS_X86_64, LINUX_X86_64, ALPHA_TRU64, LINUX_IA64 | ||
| Encoding | utf-8 Unicode (UTF-8) |
| Engine/Host Dependent Information | |
|---|---|
| Data Set Page Size | 131072 |
| Number of Data Set Pages | 1 |
| First Data Page | 1 |
| Max Obs per Page | 363 |
| Obs in First Data Page | 34 |
| Number of Data Set Repairs | 0 |
| Filename | /saswork/SAS_work1511000155AC_odaws01-apse1-2.oda.sas.com/SAS_work4C11000155AC_odaws01-apse1-2.oda.sas.com/ott_india.sas7bdat |
| Release Created | 9.0401M8 |
| Host Created | Linux |
| Inode Number | 1087665 |
| Access Permission | rw-r--r-- |
| Owner Name | u63247146 |
| File Size | 256KB |
| File Size (bytes) | 262144 |
| Variables in Creation Order | |||||
|---|---|---|---|---|---|
| # | Variable | Type | Len | Format | Label |
| 1 | Platform_ID | Num | 8 | ||
| 2 | Name | Char | 40 | Platform Name | |
| 3 | ParentCompany | Char | 40 | Parent Company | |
| 4 | HQ_City | Char | 20 | HQ (India) | |
| 5 | Model | Char | 10 | $MODEL. | Business Model |
| 6 | Regional_Focus | Char | 15 | $REGION. | Regional Focus |
| 7 | Genres | Char | 40 | Popular Genres | |
| 8 | Notes | Char | 60 | ||
| 9 | Launch_Year_India | Num | 8 | Launch Year (India) | |
| 10 | Price_Monthly_INR | Num | 8 | Monthly Price (INR) | |
| 11 | Annual_Price_INR | Num | 8 | Annual Price (INR) | |
| 12 | Subscribers_Mn | Num | 8 | Subscribers (Mn, India est) | |
| 13 | MAUs_Mn | Num | 8 | Monthly Active Users (Mn) | |
| 14 | Originals_Count_2024 | Num | 8 | Originals Count (till 2024) | |
| 15 | Avg_IMDB_Originals | Num | 8 | Avg IMDb of Originals | |
| 16 | FourK_Support | Num | 8 | YESNO. | 4K Support |
| 17 | Offline_Downloads | Num | 8 | YESNO. | Offline Downloads |
| 18 | Ad_Tier_Flag | Num | 8 | YESNO. | Has Ad Tier |
| 19 | Sports_Rights_Flag | Num | 8 | YESNO. | Sports Rights |
| 20 | Eff_Monthly_From_Annual | Num | 8 | ||
| 21 | Price_per_Original | Num | 8 | ||
| 22 | Tenure_Yrs | Num | 8 | ||
| 23 | Price_Segment | Char | 10 | ||
The MEANS Procedure
| Variable | Label | N | Mean | Std Dev | Minimum | Median | 95th Pctl | Maximum |
|---|---|---|---|---|---|---|---|---|
Price_Monthly_INR Annual_Price_INR Subscribers_Mn MAUs_Mn | Monthly Price (INR) Annual Price (INR) Subscribers (Mn, India est) Monthly Active Users (Mn) | 34 34 34 34 | 144.7941176 866.5588235 11.7882353 18.1176471 | 128.2761650 890.1369725 20.1923142 29.2956763 | 0 0 0.2000000 0.5000000 | 114.5000000 799.0000000 3.3500000 5.7500000 | 299.0000000 1799.00 60.0000000 95.0000000 | 649.0000000 4999.00 85.0000000 120.0000000 |
The FREQ Procedure
|
| ||||||||||||||||||||||||||||||||||||||||||||||||
PURPOSE (macro): Create price segment using optional custom thresholds.
%macro segment_price(ds=ott_india, b1=150, b2=300);
data &ds.; set &ds.;
length Price_Segment $10;
if Price_Monthly_INR=0 then Price_Segment='Free';
else if Price_Monthly_INR<&b1. then Price_Segment='Budget';
else if Price_Monthly_INR<&b2. then Price_Segment='Mid';
else Price_Segment='Premium';
run;
proc print data=&ds.(obs=10);
run;
%mend;
%segment_price(ds=ott_india, b1=120, b2=250);
Output:
| Obs | Platform_ID | Name | ParentCompany | HQ_City | Model | Regional_Focus | Genres | Notes | Launch_Year_India | Price_Monthly_INR | Annual_Price_INR | Subscribers_Mn | MAUs_Mn | Originals_Count_2024 | Avg_IMDB_Originals | FourK_Support | Offline_Downloads | Ad_Tier_Flag | Sports_Rights_Flag | Eff_Monthly_From_Annual | Price_per_Original | Tenure_Yrs | Price_Segment |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | Netflix India | Netflix, Inc. | Mumbai | SVOD (Subscription) | Pan‑India | Drama, Thriller, Comedy | Premium global originals | 2016 | 649 | 4999 | 8.2 | 16.5 | 220 | 7.1 | Yes | Yes | Yes | No | 416.6 | 22.7227 | 9 | Premium |
| 2 | 2 | Amazon Prime Video | Amazon | Bengaluru | SVOD (Subscription) | Pan‑India | Action, Drama, Comedy | Bundled with Prime | 2016 | 299 | 1499 | 20.5 | 35.0 | 180 | 7.0 | Yes | Yes | No | Yes | 124.9 | 8.3278 | 9 | Premium |
| 3 | 3 | Disney+ Hotstar | Disney | Mumbai | Hybrid (Mix) | Hindi | Drama, Sports, Reality | Large sports slate | 2015 | 299 | 899 | 40.0 | 50.0 | 150 | 6.8 | Yes | Yes | Yes | Yes | 74.9 | 5.9933 | 10 | Premium |
| 4 | 4 | SonyLIV | Sony Pictures | Mumbai | SVOD (Subscription) | Hindi | Thriller, Sports, Reality | Original thrillers | 2014 | 299 | 999 | 15.0 | 22.0 | 120 | 6.9 | Yes | Yes | Yes | Yes | 83.3 | 8.3250 | 11 | Premium |
| 5 | 5 | ZEE5 | Zee Entertainment | Mumbai | Hybrid (Mix) | Multi‑regiona | Drama, Soap, Reality | Strong TV library | 2018 | 199 | 699 | 34.0 | 40.0 | 140 | 6.5 | Yes | Yes | Yes | No | 58.3 | 4.9929 | 7 | Mid |
| 6 | 6 | JioCinema | Reliance | Mumbai | AVOD (Ad‑Supported) | Pan‑India | Movies, Sports | Scale via telco | 2019 | 0 | 0 | 85.0 | 120.0 | 60 | 6.0 | Yes | Yes | Yes | Yes | 0.0 | 0.0000 | 6 | Free |
| 7 | 7 | MX Player | Times Internet | Mumbai | AVOD (Ad‑Supported) | Pan‑India | Drama, Reality | High AVOD reach | 2018 | 0 | 0 | 58.0 | 95.0 | 70 | 5.9 | No | Yes | Yes | No | 0.0 | 0.0000 | 7 | Free |
| 8 | 8 | ALTBalaji/ALTT | Balaji Telefilms | Mumbai | SVOD (Subscription) | Hindi | Romance, Drama | Niche originals | 2017 | 100 | 300 | 3.2 | 6.0 | 95 | 5.8 | No | Yes | Yes | No | 25.0 | 3.1579 | 8 | Budget |
| 9 | 9 | Eros Now | Eros Media | Mumbai | SVOD (Subscription) | Hindi | Movies, Music | Movie catalogue | 2012 | 99 | 399 | 12.0 | 18.0 | 85 | 6.0 | No | Yes | Yes | No | 33.3 | 4.6941 | 13 | Budget |
| 10 | 10 | ShemarooMe | Shemaroo | Mumbai | SVOD (Subscription) | Multi‑regiona | Classics, Devotional | Legacy catalogue | 2019 | 149 | 799 | 4.0 | 7.5 | 45 | 6.2 | No | Yes | Yes | No | 66.6 | 17.7556 | 6 | Mid |
Comments
Post a Comment