172.GENERATING RANDOM STUDENT DATA IN SAS | USING DATA STEP | CREATING ARRAYS | RANDOM NUMBER GENERATION WITH RANUNI | CONDITIONAL DATA OUTPUT | PROC PRINT FOR DATA DISPLAY | PROC FREQ FOR CLASS DISTRIBUTION FINAL REPORT GENERATION USING PROC REPORT

GENERATING RANDOM STUDENT DATA IN SAS | USING DATA STEP | CREATING ARRAYS | RANDOM NUMBER GENERATION WITH RANUNI | CONDITIONAL DATA OUTPUT | PROC PRINT FOR DATA DISPLAY | PROC FREQ FOR CLASS DISTRIBUTION  | FINAL REPORT GENERATION  USING PROC REPORT

/*Creating a new dataset of School*/

Data School;

  Array Class[5] $10 _Temporary_ ('Class6','Class7','Class8','Class9','Class10');

  Array Subject[3] $15 _Temporary_ ('Math','Science','English');

  Do Roll_No = 1 To 20;

    Class_Index = Ceil(Ranuni(123)*5);

    Class_Name = Class(Class_Index);

    Num_Sub = Ceil(Ranuni(123)*3);

    Do Sub_Id = 1 To Num_Sub;

      Subject_Name = Subject(Sub_Id);

      Output;

    End;

  End;

  Drop Class_Index Num_Sub Sub_Id;

Run;

Proc Print;

Run;

Output:

Obs Roll_No Class_Name Subject_Name
1 1 Class9 Math
2 2 Class6 Math
3 2 Class6 Science
4 2 Class6 English
5 3 Class7 Math
6 4 Class9 Math
7 4 Class9 Science
8 5 Class6 Math
9 6 Class9 Math
10 6 Class9 Science
11 7 Class10 Math
12 8 Class9 Math
13 8 Class9 Science
14 9 Class8 Math
15 9 Class8 Science
16 9 Class8 English
17 10 Class6 Math
18 10 Class6 Science
19 10 Class6 English
20 11 Class9 Math
21 11 Class9 Science
22 11 Class9 English
23 12 Class9 Math
24 13 Class8 Math
25 13 Class8 Science
26 13 Class8 English
27 14 Class6 Math
28 14 Class6 Science
29 15 Class9 Math
30 15 Class9 Science
31 16 Class8 Math
32 17 Class8 Math
33 18 Class8 Math
34 18 Class8 Science
35 19 Class6 Math
36 20 Class8 Math
37 20 Class8 Science
38 20 Class8 English


/* Using Select Statement */

Data Class6 

         Class7 

         Class8 

        Class9 

       Class10;

  Set School;

  Select (Class_Name);

    When ('Class6') Output Class6;

    When ('Class7') Output Class7;

    When ('Class8') Output Class8;

    When ('Class9') Output Class9;

    When ('Class10') Output Class10;

    Otherwise;

  End;

Run;

Proc Print Data=Class6;

Run;

Output:

Obs Roll_No Class_Name Subject_Name
1 2 Class6 Math
2 2 Class6 Science
3 2 Class6 English
4 5 Class6 Math
5 10 Class6 Math
6 10 Class6 Science
7 10 Class6 English
8 14 Class6 Math
9 14 Class6 Science
10 19 Class6 Math

Proc Print Data=Class7;

Run;

Output:

Obs Roll_No Class_Name Subject_Name
1 3 Class7 Math


Proc Print Data=Class8;

Run;

Output:

Obs Roll_No Class_Name Subject_Name
1 9 Class8 Math
2 9 Class8 Science
3 9 Class8 English
4 13 Class8 Math
5 13 Class8 Science
6 13 Class8 English
7 16 Class8 Math
8 17 Class8 Math
9 18 Class8 Math
10 18 Class8 Science
11 20 Class8 Math
12 20 Class8 Science
13 20 Class8 English

Proc Print Data=Class9;

Run;

Output:

Obs Roll_No Class_Name Subject_Name
1 1 Class9 Math
2 4 Class9 Math
3 4 Class9 Science
4 6 Class9 Math
5 6 Class9 Science
6 8 Class9 Math
7 8 Class9 Science
8 11 Class9 Math
9 11 Class9 Science
10 11 Class9 English
11 12 Class9 Math
12 15 Class9 Math
13 15 Class9 Science

Proc Print Data=Class10;

Run;

Output:

Obs Roll_No Class_Name Subject_Name
1 7 Class10 Math


/*Frequency Distribution of Classes and Subjects*/

proc freq data=SCHOOL;

  tables CLASS_NAME SUBJECT_NAME / nocum nopercent;

run;

Output:

                                                                   The FREQ Procedure

Class_Name Frequency
Class10 1
Class6 10
Class7 1
Class8 13
Class9 13

Subject_Name Frequency
English 6
Math 20
Science 12

/*Aggregated Analysis*/

proc sql;

  create table ClassSummary as

  select CLASS_NAME,

         count(distinct ROLL_NO) as Total_Students,

         count(*) / count(distinct ROLL_NO) as Avg_Subjects_Per_Student

  from SCHOOL

  group by CLASS_NAME;

quit;


proc print data=ClassSummary;

run;

Output:

Obs Class_Name Total_Students Avg_Subjects_Per_Student
1 Class10 1 1.00000
2 Class6 5 2.00000
3 Class7 1 1.00000
4 Class8 6 2.16667
5 Class9 7 1.85714


/*Detailed Report*/

proc report data=SCHOOL nowd;

  column ROLL_NO CLASS_NAME SUBJECT_NAME;

  define ROLL_NO / group;

  define CLASS_NAME / group;

  define SUBJECT_NAME / display;

run;

Output:

Roll_No Class_Name Subject_Name
1 Class9 Math
2 Class6 Math
    Science
    English
3 Class7 Math
4 Class9 Math
    Science
5 Class6 Math
6 Class9 Math
    Science
7 Class10 Math
8 Class9 Math
    Science
9 Class8 Math
    Science
    English
10 Class6 Math
    Science
    English
11 Class9 Math
    Science
    English
12 Class9 Math
13 Class8 Math
    Science
    English
14 Class6 Math
    Science
15 Class9 Math
    Science
16 Class8 Math
17 Class8 Math
18 Class8 Math
    Science
19 Class6 Math
20 Class8 Math
    Science
    English

PRACTICE AND COMMENT YOUR CODE: 

--->PLEASE FOLLOW OUR BLOG FOR MORE UPDATES.

PLEASE FOLLOW OUR TELEGRAM CHANNEL CLICK HERE

PLEASE FOLLOW OUR FACEBOOK PAGE  CLICK HERE

Comments