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:
| 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 |
Comments
Post a Comment