Saturday, 20 December 2025

345.BOOK SALES & POPULARITY ANALYSIS USING SAS PROC SQL | PROC MEANS | PROC RANK | PROC FREQ | PROC SGPLOT | MACROS | DATE FUNCTIONS | ADDITIONAL SAS STATEMENTS

BOOK SALES & POPULARITY ANALYSIS USING SAS PROC SQL | PROC MEANS | PROC RANK | PROC FREQ | PROC SGPLOT | MACROS | DATE FUNCTIONS | ADDITIONAL SAS STATEMENTS

option nocenter;

1.BOOKS DATASET CREATION 

data books;

    length Book_Name $30 Author $25 Genre $15;

    format Release_Date date9.;

    input Book_Name $ Author $ Pages Sales Rating Genre $ Release_Year;

    Release_Date = mdy(6,15,Release_Year);

datalines;

HarryPotter Rowling 500 120 9.2 Fantasy 1997

LOTR Tolkien 1178 150 9.5 Fantasy 1954

Alchemist Coelho 208 65 8.6 Fiction 1988

DaVinciCode Brown 689 80 8.4 Thriller 2003

Twilight Meyer 498 90 7.2 Romance 2005

HungerGames Collins 374 85 8.1 SciFi 2008

Sherlock Holmes 221 70 9.0 Mystery 1892

GameOfThrones Martin 835 75 9.3 Fantasy 1996

FaultInStars Green 313 60 8.0 Romance 2012

Inferno Brown 480 55 7.9 Thriller 2013

Dune Herbert 658 68 9.1 SciFi 1965

AtomicHabits Clear 320 95 8.8 SelfHelp 2018

;

run;

proc print data=books;

run;

OUTPUT:

ObsBook_NameAuthorGenreRelease_DatePagesSalesRatingRelease_Year
1HarryPotterRowlingFantasy15JUN19975001209.21997
2LOTRTolkienFantasy15JUN195411781509.51954
3AlchemistCoelhoFiction15JUN1988208658.61988
4DaVinciCodeBrownThriller15JUN2003689808.42003
5TwilightMeyerRomance15JUN2005498907.22005
6HungerGamesCollinsSciFi15JUN2008374858.12008
7SherlockHolmesMystery15JUN1892221709.01892
8GameOfThronesMartinFantasy15JUN1996835759.31996
9FaultInStarsGreenRomance15JUN2012313608.02012
10InfernoBrownThriller15JUN2013480557.92013
11DuneHerbertSciFi15JUN1965658689.11965
12AtomicHabitsClearSelfHelp15JUN2018320958.82018


2.DATA VALIDATION & METADATA CHECKS

PROC CONTENTS

proc contents data=books;

run;

OUTPUT:

The CONTENTS Procedure

Data Set NameWORK.BOOKSObservations12
Member TypeDATAVariables8
EngineV9Indexes0
Created12/21/2025 07:36:37Observation Length112
Last Modified12/21/2025 07:36:37Deleted Observations0
Protection CompressedNO
Data Set Type SortedNO
Label   
Data RepresentationSOLARIS_X86_64, LINUX_X86_64, ALPHA_TRU64, LINUX_IA64  
Encodingutf-8 Unicode (UTF-8)  
Engine/Host Dependent Information
Data Set Page Size131072
Number of Data Set Pages1
First Data Page1
Max Obs per Page1168
Obs in First Data Page12
Number of Data Set Repairs0
Filename/saswork/SAS_workEB80000016D2_odaws01-apse1-2.oda.sas.com/SAS_work1778000016D2_odaws01-apse1-2.oda.sas.com/books.sas7bdat
Release Created9.0401M8
Host CreatedLinux
Inode Number67123537
Access Permissionrw-r--r--
Owner Nameu63247146
File Size256KB
File Size (bytes)262144
Alphabetic List of Variables and Attributes
#VariableTypeLenFormat
2AuthorChar25 
1Book_NameChar30 
3GenreChar15 
5PagesNum8 
7RatingNum8 
4Release_DateNum8DATE9.
8Release_YearNum8 
6SalesNum8 

PROC PRINT 

proc print data=books(obs=5);

    title "Sample Records from Books Dataset";

run;

OUTPUT:

Sample Records from Books Dataset

ObsBook_NameAuthorGenreRelease_DatePagesSalesRatingRelease_Year
1HarryPotterRowlingFantasy15JUN19975001209.21997
2LOTRTolkienFantasy15JUN195411781509.51954
3AlchemistCoelhoFiction15JUN1988208658.61988
4DaVinciCodeBrownThriller15JUN2003689808.42003
5TwilightMeyerRomance15JUN2005498907.22005

3.PROC SQL – BOOK SALES & RATING ANALYSIS

3.1 Average Sales and Ratings by Genre

proc sql;

    create table genre_summary as

    select Genre,

           count(*) as Book_Count,

           mean(Sales) as Avg_Sales format=8.2,

           mean(Rating) as Avg_Rating format=5.2

    from books

    group by Genre;

quit;

proc print data=genre_summary;

run;

OUTPUT:

ObsGenreBook_CountAvg_SalesAvg_Rating
1Fantasy3115.009.33
2Fiction165.008.60
3Mystery170.009.00
4Romance275.007.60
5SciFi276.508.60
6SelfHelp195.008.80
7Thriller267.508.15


3.2 Top-Selling Books

proc sql;

    select Book_Name, Author, Sales

    from books

    where Sales > 90

    order by Sales desc;

quit;

OUTPUT:

Book_NameAuthorSales
LOTRTolkien150
HarryPotterRowling120
AtomicHabitsClear95

4.PROC MEANS – DESCRIPTIVE STATISTICS

proc means data=books n min max mean std;

    var Pages Sales Rating;

    title "Descriptive Statistics for Books Dataset";

run;

OUTPUT:

Descriptive Statistics for Books Dataset

The MEANS Procedure

VariableNMinimumMaximumMeanStd Dev
Pages
Sales
Rating
12
12
12
208.0000000
55.0000000
7.2000000
1178.00
150.0000000
9.5000000
522.8333333
84.4166667
8.5916667
281.7303138
27.1944457
0.6881574

5.PROC RANK – POPULARITY RANKING

Ranking Books by Sales

proc rank data=books out=books_ranked descending;

    var Sales;

    ranks Sales_Rank;

run;

proc print data=books_ranked;

run;

OUTPUT:

ObsBook_NameAuthorGenreRelease_DatePagesSalesRatingRelease_YearSales_Rank
1HarryPotterRowlingFantasy15JUN19975001209.219972
2LOTRTolkienFantasy15JUN195411781509.519541
3AlchemistCoelhoFiction15JUN1988208658.6198810
4DaVinciCodeBrownThriller15JUN2003689808.420036
5TwilightMeyerRomance15JUN2005498907.220054
6HungerGamesCollinsSciFi15JUN2008374858.120085
7SherlockHolmesMystery15JUN1892221709.018928
8GameOfThronesMartinFantasy15JUN1996835759.319967
9FaultInStarsGreenRomance15JUN2012313608.0201211
10InfernoBrownThriller15JUN2013480557.9201312
11DuneHerbertSciFi15JUN1965658689.119659
12AtomicHabitsClearSelfHelp15JUN2018320958.820183


6.PROC FREQ – CATEGORICAL ANALYSIS

Genre Distribution

proc freq data=books;

    tables Genre;

    title "Distribution of Books by Genre";

run;

OUTPUT:

Distribution of Books by Genre

The FREQ Procedure

GenreFrequencyPercentCumulative
Frequency
Cumulative
Percent
Fantasy325.00325.00
Fiction18.33433.33
Mystery18.33541.67
Romance216.67758.33
SciFi216.67975.00
SelfHelp18.331083.33
Thriller216.6712100.00

Rating Categories (Using FORMAT)

proc format;

    value ratinggrp

        low-<7 = 'Low'

        7-<8.5 = 'Medium'

        8.5-high = 'High';

run;

LOG:

NOTE: Format RATINGGRP has been output.

proc freq data=books;

    tables Rating;

    format Rating ratinggrp.;

run;

OUTPUT:

The FREQ Procedure

RatingFrequencyPercentCumulative
Frequency
Cumulative
Percent
Medium541.67541.67
High758.3312100.00

7.DATE FUNCTIONS – INTNX & INTCK

7.1 Calculate Book Age in Years

data books_dates;

    set books;

    Book_Age_Years = intck('year', Release_Date, today());

run;

proc print data=books_dates;

run;

OUTPUT:

ObsBook_NameAuthorGenreRelease_DatePagesSalesRatingRelease_YearBook_Age_Years
1HarryPotterRowlingFantasy15JUN19975001209.2199728
2LOTRTolkienFantasy15JUN195411781509.5195471
3AlchemistCoelhoFiction15JUN1988208658.6198837
4DaVinciCodeBrownThriller15JUN2003689808.4200322
5TwilightMeyerRomance15JUN2005498907.2200520
6HungerGamesCollinsSciFi15JUN2008374858.1200817
7SherlockHolmesMystery15JUN1892221709.01892133
8GameOfThronesMartinFantasy15JUN1996835759.3199629
9FaultInStarsGreenRomance15JUN2012313608.0201213
10InfernoBrownThriller15JUN2013480557.9201312
11DuneHerbertSciFi15JUN1965658689.1196560
12AtomicHabitsClearSelfHelp15JUN2018320958.820187


7.2 Future Anniversary Date

data books_anniv;

    set books;

    Next_Anniversary = intnx('year', Release_Date, 50, 'same');

    format Next_Anniversary date9.;

run;

proc print data=books_anniv;

run;

OUTPUT:

ObsBook_NameAuthorGenreRelease_DatePagesSalesRatingRelease_YearNext_Anniversary
1HarryPotterRowlingFantasy15JUN19975001209.2199715JUN2047
2LOTRTolkienFantasy15JUN195411781509.5195415JUN2004
3AlchemistCoelhoFiction15JUN1988208658.6198815JUN2038
4DaVinciCodeBrownThriller15JUN2003689808.4200315JUN2053
5TwilightMeyerRomance15JUN2005498907.2200515JUN2055
6HungerGamesCollinsSciFi15JUN2008374858.1200815JUN2058
7SherlockHolmesMystery15JUN1892221709.0189215JUN1942
8GameOfThronesMartinFantasy15JUN1996835759.3199615JUN2046
9FaultInStarsGreenRomance15JUN2012313608.0201215JUN2062
10InfernoBrownThriller15JUN2013480557.9201315JUN2063
11DuneHerbertSciFi15JUN1965658689.1196515JUN2015
12AtomicHabitsClearSelfHelp15JUN2018320958.8201815JUN2068


8.PROC SGPLOT – VISUAL ANALYSIS

Sales vs Rating Scatter Plot

proc sgplot data=books;

    scatter x=Sales y=Rating / datalabel=Book_Name;

    title "Sales vs Rating for Popular Books";

run;

OUTPUT:

The SGPlot Procedure


Average Sales by Genre (Bar Chart)

proc sgplot data=genre_summary;

    vbar Genre / response=Avg_Sales datalabel;

    title "Average Sales by Genre";

run;

OUTPUT:

The SGPlot Procedure


9.MACRO – POPULARITY CLASSIFICATION

Macro Definition

%macro popularity;

    data books_popularity;

        set books;

        length Popularity $12;

        

        if Sales >= 90 then Popularity='Blockbuster';

        else if Sales >= 70 then Popularity='Popular';

        else Popularity='Average';

    run;

proc print data=books_popularity;

    run;

%mend popularity;


%popularity;

OUTPUT:

ObsBook_NameAuthorGenreRelease_DatePagesSalesRatingRelease_YearPopularity
1HarryPotterRowlingFantasy15JUN19975001209.21997Blockbuster
2LOTRTolkienFantasy15JUN195411781509.51954Blockbuster
3AlchemistCoelhoFiction15JUN1988208658.61988Average
4DaVinciCodeBrownThriller15JUN2003689808.42003Popular
5TwilightMeyerRomance15JUN2005498907.22005Blockbuster
6HungerGamesCollinsSciFi15JUN2008374858.12008Popular
7SherlockHolmesMystery15JUN1892221709.01892Popular
8GameOfThronesMartinFantasy15JUN1996835759.31996Popular
9FaultInStarsGreenRomance15JUN2012313608.02012Average
10InfernoBrownThriller15JUN2013480557.92013Average
11DuneHerbertSciFi15JUN1965658689.11965Average
12AtomicHabitsClearSelfHelp15JUN2018320958.82018Blockbuster

10.SORTING STATEMENT

SORTING

proc sort data=books out=sortedbooks;

    by descending Rating;

run;

proc print data=sortedbooks;

run;

OUTPUT:

ObsBook_NameAuthorGenreRelease_DatePagesSalesRatingRelease_Year
1LOTRTolkienFantasy15JUN195411781509.51954
2GameOfThronesMartinFantasy15JUN1996835759.31996
3HarryPotterRowlingFantasy15JUN19975001209.21997
4DuneHerbertSciFi15JUN1965658689.11965
5SherlockHolmesMystery15JUN1892221709.01892
6AtomicHabitsClearSelfHelp15JUN2018320958.82018
7AlchemistCoelhoFiction15JUN1988208658.61988
8DaVinciCodeBrownThriller15JUN2003689808.42003
9HungerGamesCollinsSciFi15JUN2008374858.12008
10FaultInStarsGreenRomance15JUN2012313608.02012
11InfernoBrownThriller15JUN2013480557.92013
12TwilightMeyerRomance15JUN2005498907.22005




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





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

PLEASE FOLLOW OUR TELEGRAM CHANNEL CLICK HERE

PLEASE FOLLOW OUR FACEBOOK PAGE  CLICK HERE

PLEASE FOLLOW OUR INSTAGRAM PAGE CLICK HERE


No comments:

Post a Comment