After referring the book 'Learning SaS by Example' of Ron Cody and reading chapters from 7 to 15, i have tried solving a few exercise problems. I will demonstrate 10 problems with proper output. The screen shot and the code of the program will be attached hereby.
In this particular program, we have created a library B14035 and thus we refereed the program calling the permanent library everytime that we have created. We have then used if else statement to determine the Quiz Grade. For instance if he got grade A then its numerical equivalent will be 95 else if B.... We then considered the data lines and then came up with a print statement executing the result by writing proc print data=....
In this program we have put up the line Subj+1 which means an increment. For the first set of data lines it says 1, for the 2nd set of data lines it shows subject 2 and then it stops on the 4th line.
In this Question we have created a do loop which runs from 1 to 20 and equivalently finds log value of individual number. For instance if we have taken N=1, we found out Log(1) which gives us a value and that continued till 20.
In this Program first we have assigned values to x, y and z as asked in the Question. Then we found out the absolute Z, circumference and Exponential X. We have used the round function to take it to a nearby value of .001
005 43 52 120 82
In this case we have created two data set. One is the master data set and then we have created a subset called NewVitals. When we displayed the output, we used the Proc Print to call the subset from the main set.
In this program we have taken an array of size 5. The scores are mentioned in the Question. In the input Id we have taken character of maximum length 3. Then we have taken a do loop and have run from 1 to 5. After that we have checked the conditions.
Q 7.1
.
Run the program here to create
a temporary SAS data set called School:
data school; input Age Quiz : $1. Midterm Final; /* Add you statements here */ datalines;
12 A 92 95
12 B 88 88
13 C 78 75
13 A 92 93
12 F 55 62
13 B 88 82
;
Using IF and ELSE IF statements, compute
two new variables as follows: Grade (numeric), with a value of 6 if Age is 12 and a
value of 8 if Age is 13.
The quiz grades have numerical
equivalents as follows: A = 95, B = 85, C = 75, D = 70, and F = 65. Using this information, compute a course grade (Course) as a
weighted average of the Quiz (20%), Midterm (30%) and Final (50%).
In this particular program, we have created a library B14035 and thus we refereed the program calling the permanent library everytime that we have created. We have then used if else statement to determine the Quiz Grade. For instance if he got grade A then its numerical equivalent will be 95 else if B.... We then considered the data lines and then came up with a print statement executing the result by writing proc print data=....
Q 8-3
Modify the program here so that
each observation contains a subject number (Subj), starting with 1:
data test; input Score1-Score3; /* add your line(s) here */ datalines; 90 88 92
75 76 88
88 82 91
72 68 70
;
In this program we have put up the line Subj+1 which means an increment. For the first set of data lines it says 1, for the 2nd set of data lines it shows subject 2 and then it stops on the 4th line.
Q 8-5
Create and print a data set
with variables N and LogN, where LogN is the natural log of N (the function is
LOG). Use a DO loop to create a table showing values of N and LogN for values
of N going from 1 to 20
.
.
In this Question we have created a do loop which runs from 1 to 20 and equivalently finds log value of individual number. For instance if we have taken N=1, we found out Log(1) which gives us a value and that continued till 20.
Q 8-11.
80 81 82 83 84 84 87 88 89 89
91 93 93 95 96 97 99 95 92 90 88
86 84 80 78 76 77 78
80 81 82 82 86
88 90 92 92 93 96
94 92 90
88 84 82 78 76 74
The first 24 values represent
temperatures from Hour 1 to Hour 24 for Dallas and the next 24 values represent
temperatures for Hour 1 to Hour 24 for Austin. Using the appropriate DO loops,
create a data set (Temperature) with 48 observations, each observation
containing the variables City, Hour, and Temp.
Note: For this problem, you will need to use a single trailing @ on your
INPUT statement
In this program again we have used do statement to count 1st 24 temperature for Dallas and then Houston. In the input we have used @ which is called trailing to read the datalines sequentially
Q 9-9
Repeat Problem 8, except use
the following data. If there is a missing value for the day, substitute the 15th of the
month.
25 12 2005
.
5 2002
12 8
2006
In this program we checked if there is any missing day. If yes that will be replaced by 15 else it will print in the normal format it is assigned
Q 11-7
Given values of x, y, and z,
compute the following (using a DATA _NULL_ step):
a.
AbsZ = absolute value of z
b.
Expx = e raised to the x power
c.
Circumference = 2 times pi
times y
Use values of x, y, and z equal to 10,
20, and –30, respectively. Round the values for b and c to the nearest
.001.
In this Program first we have assigned values to x, y and z as asked in the Question. Then we found out the absolute Z, circumference and Exponential X. We have used the round function to take it to a nearby value of .001
Q 8-1
Run the program here to create a temporary SAS data set called Vitals:
data vitals; input ID : #3. Age
Pulse
SBP DBP;
label SBP = "Systolic Blood
Pressure" DBP =
"Diastolic Blood Pressure";
datalines; 001 23 68 120 80
002 55 72 188 96
003 78 82 200 100
004 18 58 110 70
![]() |
005 43 52 120 82
006 37 74 150 98
007 .
82 140 100
;
Using this data set, create a new data
set (NewVitals) with the following new variables:
For subjects less than 50 years of age:
If Pulse is less than 70, set
PulseGroup equal to Low; otherwise, set
PulseGroup equal to High
If SBP is less than 130, set SBPGroup equal to Low; otherwise, set SBPGroup equal to High.
If SBP is less than 130, set SBPGroup equal to Low; otherwise, set SBPGroup equal to High.
For subjects greater than or equal to 50 years of age:
If Pulse is less than 74, set
PulseGroup equal to Low; otherwise, set
PulseGroup equal to High. If SBP is less than 140, set
SBPGroup equal to Low; otherwise, set
SBPGroup equal to High.
You may assume there are no missing values for Pulse or SBP.
In this case we have created two data set. One is the master data set and then we have created a subset called NewVitals. When we displayed the output, we used the Proc Print to call the subset from the main set.
Q 8-9
You have the following seven
values for temperatures for each day of the week,starting
with Monday: 70, 72, 74, 76, 77,
78, and 85. Create a temporary SAS data
set (Temperatures) with a variable (Day) equal to Mon, Tue, Wed, Thu, Fri, Sat,
and Sun and a variable called Temp equal to the listed temperature values. Use a DO loop to create theDay variable
As we have put @, which means it will run the datalines sequentially. Now in the do loop we have assigned the days of the week. So for each day it will assign the temperature sequentially. As the days are over and the reading of the datalines are over, it will stop.
Q 12-1
Look at the following program
and determine the storage length of each of the variables:
data storage; length A $ 4 B $ 4; Name = 'Goldstein';
AandB = A || B; Cat = cats(A,B);
if Name = 'Smith' then Match =
'No'; else Match = 'Yes'; Substring = substr(Name,5,2); run;
A
_________________
B
_________________
Name
_________________
AandB
_________________
Cat
_________________
Match
_________________
Substring
_________________
data storage; length A $ 4 B $ 4; Name = 'Goldstein';
AandB = A || B; Cat = cats(A,B);
if Name = 'Smith' then Match =
'No'; else Match = 'Yes'; Substring = substr(Name,5,2); run;
|
A
_________________
B
_________________
Name
_________________
AandB
_________________
Cat
_________________
Match
_________________
Substring
_________________
1.
The passing score on each of
five tests is 65, 70, 60, 62, and 68. Using the data here, use a temporary array to count the
number of tests passed by each student.
| |||||||||||||||||||||||||||||||||||

In future posts:
ReplyDelete1. The screenshots are not readable. Crop to the programs and results only before posting.
2. Number the problems solved by giving Chapter # and Problem #
3. "Beautify" the programs before posting. There a menu item in SAS studio, which does the beautification for you. Also, you may like to post the programs, the way you have posted the result.
4. Also, please zip the programs and data in one file before uploading. Otherwise, downloading them has to be done one by one, which is very tedious.
You may want to make the screenshots larger, they are not readable unless you clink on them open in a separately, which is not desirable.
Also, try out few more problems in the next post for rest of the chapters.
You have a lot to improve on the blog. For our purpose, think of it as your class notes and homework copy, combined.
It would look much better, if you:
1. Make separate page for chapters and have an index page, linking the pages for the chapters. Add links at each chapter to go back to index, previous (if any) and next (if any) pages.
2. Introduce the chapter (i.e. the page) in your own words.
3. For each problem, explain the problem you are attempting to solve. Cut and paste from Cody's book should be OK.
4. Put screenshots of programs as you have done for the results.
5. For each problem solved, write what you learned by solving the problem. Even one line is fine for this.
6. Write a conclusion or summary for each page.
Remember to :
1. Number the problems solved by giving Chapter # and Problem #
2. "Beautify" the programs before posting. There a menu item in SAS studio, which does the beautification for you. Also, you may like to post the programs, the way you have posted the result.
3. Make the screenshots (for program and output) readable in the blog page itself. It may help to crop to the programs and results only before posting.
4. Also, please zip the programs and data in one file before uploading. Otherwise, downloading them has to be done one by one, which is very tedious.
I understand, it is lot of work now, given you are trying to do it at eleventh hour. For the next submission, if time permits, you can give it a try.
Thanks
Thank you Sir, will improve the blog in the next time, keeping in minds the points you have highlighted
ReplyDelete