Recent blog posts and newsletter articles showed off how I used SAS to analyze my Netflix history. This sparked curiosity among several readers who wanted to do something similar with their own data. In this article, I'll show how to download and read this data into SAS.
Your Netflix viewing history is available from your Netflix account and profile settings. Every so often the interface changes, so this may move around over time. At the time of this writing I find my viewing history here, under the "Profile and Parental Controls" section:
Clicking View will lead you to a list of your most recent activity. But the magic button is the Download all option on the bottom right of the page:
This will download a "NetflixViewingHistory.csv" file via your browser, with all of your streaming activity recorded since you established your account. The CSV has a simple format: one record per streamed title, with two fields.
You might have multiple profiles associated with your account, used by different family members to control preferences, lists, favorites, etc. If that's the case, you must repeat this download process for each profile in your account to gather a full view. In my case, we have 5 different profiles in our account. I named each CSV file with the associated profile name as I downloaded them.
NOTE: You do not have to trigger the "Download your personal information" option that Netflix provides. That produces more data than I've captured here -- but it takes Netflix a day or longer to fulfil the request. Using the method I've shown above, you have instant access to simplified data for your viewing activity.
No Netflix account? Too embarrassed by your viewing habits to analyze it yourself? I volunteer my data as tribute. Here's a SAS program that fetches it from GitHub and imports the basics into SAS. (This program uses GIT* functions that require SAS 9.4 Maint 6 or SAS Viya 3.5 or later. It should work in SAS University Edition or SAS OnDemand for Academics.)
/* Utility macro to check if folder is empty before Git clone */
%macro FolderIsEmpty(folder);
%local memcount;
%let memcount = 0;
%let filrf=mydir;
%let rc=%sysfunc(filename(filrf, "&folder."));
%if &rc. = 0 %then %do;
%let did=%sysfunc(dopen(&filrf));
%let memcount=%sysfunc(dnum(&did));
%let rc=%sysfunc(dclose(&did));
%let rc=%sysfunc(filename(filrf));
%end;
/* Value to return: 1 if empty, else 0 */
%sysevalf(&memcount. eq 0)
%mend;
options dlcreatedir;
%let repopath=%sysfunc(getoption(WORK))/sas-netflix-git;
libname repo "&repopath.";
data _null_;
if (%FolderIsEmpty(&repoPath.)) then do;
rc = gitfn_clone(
"https://github.com/cjdinger/sas-netflix-git",
"&repoPath."
);
put 'Git repo cloned ' rc=;
end;
else put "Skipped Git clone, folder not empty";
run;
filename viewing "&repopath./NetflixData/*.csv";
data viewing (keep=title date profile);
length title $ 300 date 8
profile $ 40 in $ 250;
format date date9.;
infile viewing dlm=',' dsd filename=in firstobs=2;
profile=scan(in,-1,'\/');
input title date:??anydtdte.;
if date^=. and title ^="";
run;
If you want to take it a step further and parse the Netflix titles, you can create some "feature" variables as you read in the data:
data viewing;
length title $ 300 date 8
maintitle $ 60 episode $ 40 season $ 12
profile $ 40 in $ 250;
informat date mmddyy.;
format date date9.;
infile viewing dlm=',' dsd filename=in firstobs=2;
profile=scan(in,-1,'\/');
input title date;
array part $ 60 part1-part4;
do i = 1 to 4;
part{i} = scan(title, i, ':',);
if (find(part{i},"Season")>0)
then do;
season=part{i};
end;
end;
drop i;
maintitle = part{1};
episode = part{3};
if Title ^= "Title";
run;
Example output:
If you want to start from just my data files yourself, you can find those in this GitHub folder.
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
Data Literacy is for all, even absolute beginners. Jump on board with this free e-learning and boost your career prospects.