298.How Can SAS Be Used to Analyze Intermediate Students Performance

How Can SAS Be Used to Analyze Intermediate Students Performance

options nocenter;

1. DATA SIMULATION MACRO

/* SIMULATE STUDENT DATA */

%macro simulate_students;

data Students_Marks;

    length StuID $5 StuName $15 Subject $12 Grade $2;

    

    do n = 1 to 7;  /* numeric loop instead of character loop */

        StuID = cats("S", put(n, z2.));  /* creates S01, S02, ... S7 */

        

        select (StuID);

            when ("S01") StuName="Rahul";

            when ("S02") StuName="Anitha";

            when ("S03") StuName="Kiran";

            when ("S04") StuName="Priya";

            when ("S05") StuName="Vamsi";

            when ("S06") StuName="Divya";

            when ("S07") StuName="Rohit";

            otherwise;

        end;


        /* Assign random subjects and marks */

        array subs[3] $12 _temporary_ ('Maths','Physics','Chemistry');

        do i=1 to dim(subs);

            Subject = subs[i];

            Marks = 50 + int(50*ranuni(123));

            if Marks >=90 then Grade="A+";

            else if Marks >=80 then Grade="A";

            else if Marks >=70 then Grade="B";

            else if Marks >=60 then Grade="C";

            else if Marks >=50 then Grade="D";

            else Grade="F";

            output;

        end;

    end;

    drop i n;

run;

%mend simulate_students;


%simulate_students;

proc print data=Students_Marks;

run;

OUTPUT:

ObsStuIDStuNameSubjectGradeMarks
1S01RahulMathsA87
2S01RahulPhysicsC66
3S01RahulChemistryD58
4S02AnithaMathsA+95
5S02AnithaPhysicsC67
6S02AnithaChemistryC61
7S03KiranMathsA89
8S03KiranPhysicsC69
9S03KiranChemistryD56
10S04PriyaMathsD59
11S04PriyaPhysicsA88
12S04PriyaChemistryB71
13S05VamsiMathsA+98
14S05VamsiPhysicsC63
15S05VamsiChemistryA85
16S06DivyaMathsB77
17S06DivyaPhysicsB76
18S06DivyaChemistryA+93
19S07RohitMathsD57
20S07RohitPhysicsA+93
21S07RohitChemistryA82


2. CREATE SECONDARY TABLES

/* Student Info Dataset */

data Students_Info;

    input StuID $ Age Gender $ Section $;

    datalines;

S01 17 M A

S02 18 F B

S03 17 M A

S04 18 F A

S05 17 M B

S06 17 F C

S07 18 M C

;

run;

proc print data=Students_Info;

run;

OUTPUT:

ObsStuIDAgeGenderSection
1S0117MA
2S0218FB
3S0317MA
4S0418FA
5S0517MB
6S0617FC
7S0718MC


/* Sports Information Dataset */

data Students_Sports;

    input StuID $ Sport:$10. Position $;

    datalines;

S01 Cricket Captain

S02 Badminton Player

S03 Football Player

S04 KhoKho Captain

S05 Chess Player

S06 Basketball Player

S07 Kabaddi Captain

;

run;

proc print data=Students_Sports;

run;

OUTPUT:

ObsStuIDSportPosition
1S01CricketCaptain
2S02BadmintonPlayer
3S03FootballPlayer
4S04KhoKhoCaptain
5S05ChessPlayer
6S06BasketballPlayer
7S07KabaddiCaptain


3. COMBINING DATA TECHNIQUES

3a. Using SET

/* Creating two parts for SET demonstration */

data Term1;

    set Students_Marks(obs=9);

run;

proc print data=Term1;

run;

OUTPUT:

ObsStuIDStuNameSubjectGradeMarks
1S01RahulMathsA87
2S01RahulPhysicsC66
3S01RahulChemistryD58
4S02AnithaMathsA+95
5S02AnithaPhysicsC67
6S02AnithaChemistryC61
7S03KiranMathsA89
8S03KiranPhysicsC69
9S03KiranChemistryD56


data Term2;

    set Students_Marks(firstobs=10 obs=21);

run;

proc print data=Term2;

run;

OUTPUT:

ObsStuIDStuNameSubjectGradeMarks
1S04PriyaMathsD59
2S04PriyaPhysicsA88
3S04PriyaChemistryB71
4S05VamsiMathsA+98
5S05VamsiPhysicsC63
6S05VamsiChemistryA85
7S06DivyaMathsB77
8S06DivyaPhysicsB76
9S06DivyaChemistryA+93
10S07RohitMathsD57
11S07RohitPhysicsA+93
12S07RohitChemistryA82


/* Combine both terms */

data Combined_SET;

    set Term1 Term2;

run;

proc print data=Combined_SET;

run;

OUTPUT:

ObsStuIDStuNameSubjectGradeMarks
1S01RahulMathsA87
2S01RahulPhysicsC66
3S01RahulChemistryD58
4S02AnithaMathsA+95
5S02AnithaPhysicsC67
6S02AnithaChemistryC61
7S03KiranMathsA89
8S03KiranPhysicsC69
9S03KiranChemistryD56
10S04PriyaMathsD59
11S04PriyaPhysicsA88
12S04PriyaChemistryB71
13S05VamsiMathsA+98
14S05VamsiPhysicsC63
15S05VamsiChemistryA85
16S06DivyaMathsB77
17S06DivyaPhysicsB76
18S06DivyaChemistryA+93
19S07RohitMathsD57
20S07RohitPhysicsA+93
21S07RohitChemistryA82


3b. Using MERGE

proc sort data=Students_Info;

 by StuID; 

run;

proc print data=Students_Info;

run;

OUTPUT:

ObsStuIDAgeGenderSection
1S0117MA
2S0218FB
3S0317MA
4S0418FA
5S0517MB
6S0617FC
7S0718MC


proc sort data=Students_Sports; 

  by StuID; 

run;

proc print data=Students_Sports;

run;

OUTPUT:

ObsStuIDSportPosition
1S01CricketCaptain
2S02BadmintonPlayer
3S03FootballPlayer
4S04KhoKhoCaptain
5S05ChessPlayer
6S06BasketballPlayer
7S07KabaddiCaptain


/* Merge horizontally */

data Combined_MERGE;

    merge Students_Info Students_Sports;

    by StuID;

run;

proc print data=Combined_MERGE;

run;

OUTPUT:

ObsStuIDAgeGenderSectionSportPosition
1S0117MACricketCaptain
2S0218FBBadmintonPlayer
3S0317MAFootballPlayer
4S0418FAKhoKhoCaptain
5S0517MBChessPlayer
6S0617FCBasketballPlayer
7S0718MCKabaddiCaptain


3c. Using PROC SQL (Join)

proc sql;

    create table Combined_SQL as

    select a.StuID, a.StuName, a.Subject, a.Marks, a.Grade,

           b.Age, b.Gender, c.Sport, c.Position

    from Students_Marks a

    left join Students_Info b 

    on a.StuID=b.StuID

    left join Students_Sports c 

    on a.StuID=c.StuID

    order by a.StuID;

quit;

proc print data=Combined_SQL;

run;

OUTPUT:

ObsStuIDStuNameSubjectMarksGradeAgeGenderSportPosition
1S01RahulPhysics66C17MCricketCaptain
2S01RahulChemistry58D17MCricketCaptain
3S01RahulMaths87A17MCricketCaptain
4S02AnithaChemistry61C18FBadmintonPlayer
5S02AnithaPhysics67C18FBadmintonPlayer
6S02AnithaMaths95A+18FBadmintonPlayer
7S03KiranMaths89A17MFootballPlayer
8S03KiranChemistry56D17MFootballPlayer
9S03KiranPhysics69C17MFootballPlayer
10S04PriyaChemistry71B18FKhoKhoCaptain
11S04PriyaPhysics88A18FKhoKhoCaptain
12S04PriyaMaths59D18FKhoKhoCaptain
13S05VamsiChemistry85A17MChessPlayer
14S05VamsiPhysics63C17MChessPlayer
15S05VamsiMaths98A+17MChessPlayer
16S06DivyaChemistry93A+17FBasketballPlayer
17S06DivyaPhysics76B17FBasketballPlayer
18S06DivyaMaths77B17FBasketballPlayer
19S07RohitChemistry82A18MKabaddiCaptain
20S07RohitPhysics93A+18MKabaddiCaptain
21S07RohitMaths57D18MKabaddiCaptain


4. QC CHECKS USING PROC COMPARE 

proc compare base=Combined_MERGE compare=Combined_SQL 

             out=Compare_Result noprint;

run;

proc print data=Compare_Result (obs=10);

    title "QC Comparison between MERGE and SQL Outputs";

run;

OUTPUT:


QC Comparison between MERGE and SQL Outputs

Obs_TYPE__OBS_StuIDAgeGenderSportPosition
1DIF1........0..........................
2DIF2..X.....-1X.......XXXXXX.XX.XXXXXXX.
3DIF3..X.....0........XXXXXXXX..XXXXXXX.
4DIF4..X.....0........XXXXXXXXX.XXXXXXX.
5DIF5..X.....1X.......XXXXXXXXX.........
6DIF6..X.....1..........XXXXXXXX........
7DIF7..X.....-1........XXXXXXXX..XXXXXXX.

5. TLF-STYLE SUMMARY TABLES

5a. PROC REPORT

proc report data=Combined_SQL nowd headline headskip;

    column StuName Subject Marks Grade;

    define StuName / group 'Student Name';

    define Subject / group 'Subject';

    define Marks / analysis mean format=8.2 'Average Marks';

    define Grade / group;

    rbreak after / summarize;

    title "TABLE 1: STUDENTS PERFORMANCE SUMMARY BY SUBJECT";

run;

OUTPUT:

TABLE 1: STUDENTS PERFORMANCE SUMMARY BY SUBJECT

Student NameSubjectAverage MarksGrade
AnithaChemistry61.00C
 Maths95.00A+
 Physics67.00C
DivyaChemistry93.00A+
 Maths77.00B
 Physics76.00B
KiranChemistry56.00D
 Maths89.00A
 Physics69.00C
PriyaChemistry71.00B
 Maths59.00D
 Physics88.00A
RahulChemistry58.00D
 Maths87.00A
 Physics66.00C
RohitChemistry82.00A
 Maths57.00D
 Physics93.00A+
VamsiChemistry85.00A
 Maths98.00A+
 Physics63.00C
  75.71 

5b. PROC REPORT : SHOWS TOTAL MARKS PER STUDENT 

proc report data=Combined_SQL nowd headline headskip;

    column StuID StuName Subject Marks Grade;


    define StuID   / group 'Student ID';

    define StuName / group 'Student Name';

    define Subject / display 'Subject';

    define Marks   / display format=8.2 'Marks';

    define Grade   / display 'Grade';


    /* Initialize accumulator before each student group */

    compute before StuID;

         sumMarks = 0;

    endcomp;


    /* Accumulate marks as each subject row is processed */

    compute Marks;

        sumMarks + Marks;

    endcomp;


    /* After the group (student) is finished, print the total line */

    compute after StuID;

        line '';

        line @5 "Total Marks for " StuName $15. ": " sumMarks 8.2;

        line '';

    endcomp;


    title "TABLE 2: STUDENTS PERFORMANCE SUMMARY WITH TOTAL PER STUDENT (LINE)";

run;

OUTPUT:

TABLE 2: STUDENTS PERFORMANCE SUMMARY WITH TOTAL PER STUDENT (LINE)

Student IDStudent NameSubjectMarksGrade
S01RahulPhysics66.00C
  Chemistry58.00D
  Maths87.00A
 
    Total Marks for                :   211.00
 
S02AnithaChemistry61.00C
  Physics67.00C
  Maths95.00A+
 
    Total Marks for                :   223.00
 
S03KiranMaths89.00A
  Chemistry56.00D
  Physics69.00C
 
    Total Marks for                :   214.00
 
S04PriyaChemistry71.00B
  Physics88.00A
  Maths59.00D
 
    Total Marks for                :   218.00
 
S05VamsiChemistry85.00A
  Physics63.00C
  Maths98.00A+
 
    Total Marks for                :   246.00
 
S06DivyaChemistry93.00A+
  Physics76.00B
  Maths77.00B
 
    Total Marks for                :   246.00
 
S07RohitChemistry82.00A
  Physics93.00A+
  Maths57.00D
 
    Total Marks for                :   232.00
 

5c. PROC TABULATE

proc tabulate data=Combined_SQL;

    class Subject Grade;

    var Marks;

    table Subject,

          Grade*(Marks*(mean min max))

          / misstext='0' box='Subjects';

    title "TABLE 3: SUBJECT-WISE MARK STATISTICS BY GRADE";

run;

OUTPUT:

TABLE 3: SUBJECT-WISE MARK STATISTICS BY GRADE

SubjectsGrade
AA+BCD
MarksMarksMarksMarksMarks
MeanMinMaxMeanMinMaxMeanMinMaxMeanMinMaxMeanMinMax
Subject83.5082.0085.0093.0093.0093.0071.0071.0071.0061.0061.0061.0057.0056.0058.00
Chemistry
Maths88.0087.0089.0096.5095.0098.0077.0077.0077.0000058.0057.0059.00
Physics88.0088.0088.0093.0093.0093.0076.0076.0076.0066.2563.0069.00000

6. REPORT MACRO

/*------------- MACRO : REPORT GENERATION --------------*/

%macro report_summary(type=REPORT);


%if &type=REPORT %then %do;

    ods pdf file="C:\SASReports\Student_Report.pdf";

    proc report data=Combined_SQL nowd;

        column StuID StuName Subject Marks Grade;

        define StuID / group;

        define StuName / group;

        define Subject / group;

        define Marks / analysis mean 'Avg Marks';

        define Grade / group;

        title "STUDENTS PERFORMANCE REPORT (PROC REPORT)";

    run;

    ods pdf close;

%end;


%else %if &type=TABULATE %then %do;

    ods pdf file="C:\SASReports\Student_Tabulates.pdf";

    proc tabulate data=Combined_SQL;

        class Subject Grade;

        var Marks;

        table Subject, Grade*(Marks*(mean min max));

        title "STUDENTS PERFORMANCE SUMMARY (PROC TABULATE)";

    run;

    ods pdf close;

%end;


%mend report_summary;


/* Call both report types */

%report_summary(type=REPORT);

OUTPUT:

STUDENTS PERFORMANCE REPORT (PROC REPORT)

StuIDStuNameSubjectAvg MarksGrade
S01RahulChemistry58D
  Maths87A
  Physics66C
S02AnithaChemistry61C
  Maths95A+
  Physics67C
S03KiranChemistry56D
  Maths89A
  Physics69C
S04PriyaChemistry71B
  Maths59D
  Physics88A
S05VamsiChemistry85A
  Maths98A+
  Physics63C
S06DivyaChemistry93A+
  Maths77B
  Physics76B
S07RohitChemistry82A
  Maths57D
  Physics93A+

%report_summary(type=TABULATE);

OUTPUT:

STUDENTS PERFORMANCE SUMMARY (PROC TABULATE)

 Grade
AA+BCD
MarksMarksMarksMarksMarks
MeanMinMaxMeanMinMaxMeanMinMaxMeanMinMaxMeanMinMax
Subject83.5082.0085.0093.0093.0093.0071.0071.0071.0061.0061.0061.0057.0056.0058.00
Chemistry
Maths88.0087.0089.0096.5095.0098.0077.0077.0077.00...58.0057.0059.00
Physics88.0088.0088.0093.0093.0093.0076.0076.0076.0066.2563.0069.00...





To Visit My Previous Proc  Means And Nway Option:Click Here
To Visit My Previous Proc Means And CharType Option:Click Here
To Visit My Previous SAS Functions:Click Here
To Visit My Previous Length Statement Using In Many Ways:Click Here






Follow Us On : 


 


--- FOLLOW OUR BLOG FOR MORE INFORMATION.

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

Comments

Popular posts from this blog

409.Can We Build a Reliable Emergency Services Analytics & Fraud Detection System in SAS While Identifying and Fixing Intentional Errors?

397.If a satellite has excellent signal strength but very high latency, can it still deliver good quality communication? Why or why not?A Sas Study

401.How Efficient Are Global Data Centers? A Complete SAS Analytics Study