Thursday, 25 December 2025

350.GAMING PLAYERS PERFORMANCE ANALYSIS USING SAS DATA STEP | PROC SQL | PROC MEANS | PROC UNIVARIATE | PROC SGPLOT | MACROS | DATE FUNCTIONS | APPEND | MERGE | TRANSPOSE

GAMING PLAYERS PERFORMANCE ANALYSIS USING SAS DATA STEP | PROC SQL | PROC MEANS | PROC UNIVARIATE | PROC SGPLOT | MACROS | DATE FUNCTIONS | APPEND | MERGE | TRANSPOSE

options nocenter;

1.GAMING PLAYERS DATASET CREATION

data work.gaming_players;

    length Player_Name $20 Country $15;

    format Join_Date Last_Play_Date date9.;

    input Player_Name $ Country $ Hours_Played Wins Kills Rank Join_Date :date9.;

          Last_Play_Date = intnx('day', Join_Date, ceil(Hours_Played/10));

    datalines;

Alex    USA     520  120  3400  1 01JAN2024

Ravi    India   480  110  3100  2 15JAN2024

Chen    China   460  105  2950  3 01FEB2024

Carlos  Brazil  430  98   2700  4 10FEB2024

Ivan    Russia  410  95   2600  5 20FEB2024

Leo     France  390  90   2450  6 01MAR2024

Sam     UK      360  85   2300  7 10MAR2024

Noah    Canada  340  80   2150  8 15MAR2024

Ali     UAE     320  75   2000  9 20MAR2024

Tom     Australia 300 70  1850 10 01APR2024

Ken     Japan   280  65   1700 11 05APR2024

Mark    Germany 260  60   1550 12 10APR2024

;

run;

proc print data=work.gaming_players;

run;

OUTPUT:

ObsPlayer_NameCountryJoin_DateLast_Play_DateHours_PlayedWinsKillsRank
1AlexUSA01JAN202422FEB202452012034001
2RaviIndia15JAN202403MAR202448011031002
3ChenChina01FEB202418MAR202446010529503
4CarlosBrazil10FEB202424MAR20244309827004
5IvanRussia20FEB202401APR20244109526005
6LeoFrance01MAR202409APR20243909024506
7SamUK10MAR202415APR20243608523007
8NoahCanada15MAR202418APR20243408021508
9AliUAE20MAR202421APR20243207520009
10TomAustralia01APR202401MAY202430070185010
11KenJapan05APR202403MAY202428065170011
12MarkGermany10APR202406MAY202426060155012


2.DATE FUNCTIONS PRACTICE

2.1 Months Active Using INTCK

data work.player_duration;

    set gaming_players;

    Months_Active = intck('month', Join_Date, Last_Play_Date);

run;

proc print data=work.player_duration;

run;

OUTPUT:

ObsPlayer_NameCountryJoin_DateLast_Play_DateHours_PlayedWinsKillsRankMonths_Active
1AlexUSA01JAN202422FEB2024520120340011
2RaviIndia15JAN202403MAR2024480110310022
3ChenChina01FEB202418MAR2024460105295031
4CarlosBrazil10FEB202424MAR202443098270041
5IvanRussia20FEB202401APR202441095260052
6LeoFrance01MAR202409APR202439090245061
7SamUK10MAR202415APR202436085230071
8NoahCanada15MAR202418APR202434080215081
9AliUAE20MAR202421APR202432075200091
10TomAustralia01APR202401MAY2024300701850101
11KenJapan05APR202403MAY2024280651700111
12MarkGermany10APR202406MAY2024260601550121


2.2 Generating a Fixed Tournament Date Using MDY

data work.tournament;

    set gaming_players;

    Tournament_Date = mdy(6, 15, 2024);

    format Tournament_Date date9.;

run;

proc print data=work.tournament;

run;

OUTPUT:

ObsPlayer_NameCountryJoin_DateLast_Play_DateHours_PlayedWinsKillsRankTournament_Date
1AlexUSA01JAN202422FEB20245201203400115JUN2024
2RaviIndia15JAN202403MAR20244801103100215JUN2024
3ChenChina01FEB202418MAR20244601052950315JUN2024
4CarlosBrazil10FEB202424MAR2024430982700415JUN2024
5IvanRussia20FEB202401APR2024410952600515JUN2024
6LeoFrance01MAR202409APR2024390902450615JUN2024
7SamUK10MAR202415APR2024360852300715JUN2024
8NoahCanada15MAR202418APR2024340802150815JUN2024
9AliUAE20MAR202421APR2024320752000915JUN2024
10TomAustralia01APR202401MAY20243007018501015JUN2024
11KenJapan05APR202403MAY20242806517001115JUN2024
12MarkGermany10APR202406MAY20242606015501215JUN2024


3.PROC SQL – DATA QUERY & DERIVED METRICS

3.1 Calculating Kill Efficiency

proc sql;

    create table work.player_efficiency as

    select Player_Name,Country,Hours_Played,Kills,Wins,

           (Kills / Hours_Played) as Kill_Rate format=8.2

    from gaming_players

    order by Kill_Rate desc;

quit;

proc print data=work.player_efficiency;

run;

OUTPUT:

ObsPlayer_NameCountryHours_PlayedKillsWinsKill_Rate
1AlexUSA52034001206.54
2RaviIndia48031001106.46
3ChenChina46029501056.41
4SamUK3602300856.39
5IvanRussia4102600956.34
6NoahCanada3402150806.32
7LeoFrance3902450906.28
8CarlosBrazil4302700986.28
9AliUAE3202000756.25
10TomAustralia3001850706.17
11KenJapan2801700656.07
12MarkGermany2601550605.96


4.PROC MEANS – STATISTICAL SUMMARY

proc means data=gaming_players mean min max;

    var Hours_Played Wins Kills Rank;

run;

OUTPUT:

The MEANS Procedure

VariableMeanMinimumMaximum
Hours_Played
Wins
Kills
Rank
379.1666667
87.7500000
2395.83
6.5000000
260.0000000
60.0000000
1550.00
1.0000000
520.0000000
120.0000000
3400.00
12.0000000

5.PROC UNIVARIATE – DISTRIBUTION ANALYSIS

proc univariate data=gaming_players;

    var Kills;

    histogram Kills;

run;

OUTPUT:

The UNIVARIATE Procedure

Variable: Kills

Moments
N12Sum Weights12
Mean2395.83333Sum Observations28750
Std Deviation577.792953Variance333844.697
Skewness0.2184608Kurtosis-0.8796393
Uncorrected SS72552500Corrected SS3672291.67
Coeff Variation24.1165754Std Error Mean166.794459
Basic Statistical Measures
LocationVariability
Mean2395.833Std Deviation577.79295
Median2375.000Variance333845
Mode.Range1850
  Interquartile Range900.00000
Tests for Location: Mu0=0
TestStatisticp Value
Student's tt14.36399Pr > |t|<.0001
SignM6Pr >= |M|0.0005
Signed RankS39Pr >= |S|0.0005
Quantiles (Definition 5)
LevelQuantile
100% Max3400
99%3400
95%3400
90%3100
75% Q32825
50% Median2375
25% Q11925
10%1700
5%1550
1%1550
0% Min1550
Extreme Observations
LowestHighest
ValueObsValueObs
15501226005
17001127004
18501029503
2000931002
2150834001

The UNIVARIATE Procedure

Histogram for Kills

6.PROC SGPLOT – DATA VISUALIZATION

6.1 Hours Played vs Wins

proc sgplot data=gaming_players;

    scatter x=Hours_Played y=Wins;

    title "Hours Played vs Wins";

run;

OUTPUT:

The SGPlot Procedure


7.MACRO – AUTOMATED PLAYER RANKING

%macro player_category;

    data work.player_category;

        set gaming_players;

        length Player_Level $15;

        

        if Rank <= 3 then Player_Level = "Elite";

        else if Rank <= 7 then Player_Level = "Pro";

        else Player_Level = "Beginner";

    run;

proc print data=work.player_category;

    run;

%mend;


%player_category;

OUTPUT:

ObsPlayer_NameCountryJoin_DateLast_Play_DateHours_PlayedWinsKillsRankPlayer_Level
1AlexUSA01JAN202422FEB202452012034001Elite
2RaviIndia15JAN202403MAR202448011031002Elite
3ChenChina01FEB202418MAR202446010529503Elite
4CarlosBrazil10FEB202424MAR20244309827004Pro
5IvanRussia20FEB202401APR20244109526005Pro
6LeoFrance01MAR202409APR20243909024506Pro
7SamUK10MAR202415APR20243608523007Pro
8NoahCanada15MAR202418APR20243408021508Beginner
9AliUAE20MAR202421APR20243207520009Beginner
10TomAustralia01APR202401MAY202430070185010Beginner
11KenJapan05APR202403MAY202428065170011Beginner
12MarkGermany10APR202406MAY202426060155012Beginner


8.PROC APPEND – ADDITIONAL PLAYERS

data work.new_players;

    length Player_Name $20 Country $15;

    format Join_Date date9.;

    input Player_Name $ Country $ Hours_Played Wins Kills Rank Join_Date :date9.;

    datalines;

Zane USA 200 45 1200 13 15APR2024

;

run;

proc print data=work.new_players;

run;

OUTPUT:

ObsPlayer_NameCountryJoin_DateHours_PlayedWinsKillsRank
1ZaneUSA15APR202420045120013


proc append base=gaming_players 

            data=new_players force;

run;

proc print data=work.gaming_players;

run;

OUTPUT:

ObsPlayer_NameCountryJoin_DateLast_Play_DateHours_PlayedWinsKillsRank
1AlexUSA01JAN202422FEB202452012034001
2RaviIndia15JAN202403MAR202448011031002
3ChenChina01FEB202418MAR202446010529503
4CarlosBrazil10FEB202424MAR20244309827004
5IvanRussia20FEB202401APR20244109526005
6LeoFrance01MAR202409APR20243909024506
7SamUK10MAR202415APR20243608523007
8NoahCanada15MAR202418APR20243408021508
9AliUAE20MAR202421APR20243207520009
10TomAustralia01APR202401MAY202430070185010
11KenJapan05APR202403MAY202428065170011
12MarkGermany10APR202406MAY202426060155012
13ZaneUSA15APR2024.20045120013


9.PROC MERGE – COMBINING DATASETS

proc sort data=gaming_players; by Player_Name; run;

proc print data=work.gaming_players;

run;

OUTPUT:

ObsPlayer_NameCountryJoin_DateLast_Play_DateHours_PlayedWinsKillsRank
1AlexUSA01JAN202422FEB202452012034001
2AliUAE20MAR202421APR20243207520009
3CarlosBrazil10FEB202424MAR20244309827004
4ChenChina01FEB202418MAR202446010529503
5IvanRussia20FEB202401APR20244109526005
6KenJapan05APR202403MAY202428065170011
7LeoFrance01MAR202409APR20243909024506
8MarkGermany10APR202406MAY202426060155012
9NoahCanada15MAR202418APR20243408021508
10RaviIndia15JAN202403MAR202448011031002
11SamUK10MAR202415APR20243608523007
12TomAustralia01APR202401MAY202430070185010
13ZaneUSA15APR2024.20045120013


proc sort data=player_category; by Player_Name; run;

proc print data=work.player_category;

run;

OUTPUT:

ObsPlayer_NameCountryJoin_DateLast_Play_DateHours_PlayedWinsKillsRankPlayer_Level
1AlexUSA01JAN202422FEB202452012034001Elite
2AliUAE20MAR202421APR20243207520009Beginner
3CarlosBrazil10FEB202424MAR20244309827004Pro
4ChenChina01FEB202418MAR202446010529503Elite
5IvanRussia20FEB202401APR20244109526005Pro
6KenJapan05APR202403MAY202428065170011Beginner
7LeoFrance01MAR202409APR20243909024506Pro
8MarkGermany10APR202406MAY202426060155012Beginner
9NoahCanada15MAR202418APR20243408021508Beginner
10RaviIndia15JAN202403MAR202448011031002Elite
11SamUK10MAR202415APR20243608523007Pro
12TomAustralia01APR202401MAY202430070185010Beginner


data work.player_full;

    merge gaming_players player_category;

    by Player_Name;

run;

proc print data=work.player_full;

run;

OUTPUT:

ObsPlayer_NameCountryJoin_DateLast_Play_DateHours_PlayedWinsKillsRankPlayer_Level
1AlexUSA01JAN202422FEB202452012034001Elite
2AliUAE20MAR202421APR20243207520009Beginner
3CarlosBrazil10FEB202424MAR20244309827004Pro
4ChenChina01FEB202418MAR202446010529503Elite
5IvanRussia20FEB202401APR20244109526005Pro
6KenJapan05APR202403MAY202428065170011Beginner
7LeoFrance01MAR202409APR20243909024506Pro
8MarkGermany10APR202406MAY202426060155012Beginner
9NoahCanada15MAR202418APR20243408021508Beginner
10RaviIndia15JAN202403MAR202448011031002Elite
11SamUK10MAR202415APR20243608523007Pro
12TomAustralia01APR202401MAY202430070185010Beginner
13ZaneUSA15APR2024.20045120013 

10.PROC TRANSPOSE – STRUCTURAL TRANSFORMATION

proc transpose data=gaming_players out=work.transposed_kills;

    by Country NotSorted;

    var Kills;

run;

proc print data=work.transposed_kills;

run;

OUTPUT:

ObsCountry_NAME_COL1
1USAKills3400
2UAEKills2000
3BrazilKills2700
4ChinaKills2950
5RussiaKills2600
6JapanKills1700
7FranceKills2450
8GermanyKills1550
9CanadaKills2150
10IndiaKills3100
11UKKills2300
12AustraliaKills1850
13USAKills1200




To Visit My Previous Electronic Data Analysis:Click Here
To Visit My Previous IPS Toppers Dataset:Click Here
To Visit My Previous Global Money Loan Trends Dataset:Click Here
To Visit My Previous Statewise Population Analysis:Click Here



Follow Us On : 


 


--- FOLLOW OUR BLOG FOR MORE INFORMATION.

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

No comments:

Post a Comment