BookmarkSubscribeRSS Feed
pransh
Calcite | Level 5

i was doing homework 

this are the questions for your reference.

I was struggling with q2 and q3

 

1) Read only the following variables into a matrix called CG: NACZZMS, NACCLMI, NACCZLMD,
NACCDFT, NACCAGEB.
2) Using loops, replace the missing codes 99 and -99 for the following neuropsychological scores:
NACZZMS, NACCLMI, NACCZLMD and NACCDFT
3) Calculate the mean of the scores: NACZZMS, NACCLMI, NACCZLMD and NACCDFT and name the
new variable “Cognition”
4) Identify the subjects who have mean cognitive score less than -1.5 (Note: SAS thinks that a missing
value is equal to –infinity)
5) Export the matrix of the row numbers of subjects from question 4 in a dataset called IMPAIRED.
6) Within IML, run a regression (proc REG) with the “Cognition” as the dependent variable and age as
the independent variable.

 

 

 

 

the code which I have used is as follows, I could only solve question 1, I dont know how to approach question 2 and 3 .

 

Your help will be appriciated

libname in "E:\hw";

 

proc iml;
varnames={"NACCZMMS" "NACCZLMI" "NACCZDFT" "NACCZLMD" "NACCAGEB"};
use in.exercise;
read all var varnames into cg;
print cg[c=varnames];

quit;

8 REPLIES 8
PaigeMiller
Diamond | Level 26

i was doing homework

 

Please give each of these questions a try and show us the code you have tried. To be honest, we're not going to do homework for you, but we will try to help you if you get stuck.

--
Paige Miller
Rick_SAS
SAS Super FREQ

> Using loops, replace the missing codes 99 and -99 for the following neuropsychological scores:
NACZZMS, NACCLMI, NACCZLMD and NACCDFT

 

Think about where these variables are in the CG matrix. They are in columns 1-4, right? So you can loop over the rows and columns and use an IF-THEN statement to detect whether any values are 99 or -99. If so, replace them with a SAS missing value.

 

In developing computer programs, it is often useful to solve a small example before you tackle the larger problem. See if the following example helps you solve your problem. You will need to rewrite the program to use your matrix (CG) instead of the small example matrix:

proc iml;
/* replace -99 and 99 with a missing value */
 X = {0 -99  1  2,
     99   3  4  5,
      6   7 99 -99};
do i = 1 to nrow(X);
   do j = 1 to 4;
      if X[i,j]= 99 | X[i,j]= -99 then 
         X[i,j] = .;
   end;
end;

print X;
pransh
Calcite | Level 5

hi,

I corrected my code accordingly

 

libname in "E:\Third sem MPH\BS 803\class 3\hw";

proc iml;
varnames={"NACCZMMS" "NACCZLMI" "NACCZDFT" "NACCZLMD" "NACCAGEB"};
use in.exercise;
read all var varnames into cg;
do i = 1 to nrow(cg);
do j = 1 to 4;
if cg[i,j]= 99 | cg[i,j]= -99 then
cg[i,j] = .;
end;
end;
cognition=cg[:,];
print cognition cg[c=varnames];

quit;

 

I also took out the means for each col but in the question it has been asked to identify the subjects who have mean score less then -1.5, but here since i have taken out the means of each coloumn , is it impossible to take out to identify the subjects who have mean score less then -1.5

Rick_SAS
SAS Super FREQ

Remark: Since NACCAGEB is not used in this problem, the program will be simpler if you exclude the variable. Then you don't have to subset by columns 1:4.

 

> 3) Calculate the mean of the scores: NACZZMS, NACCLMI, NACCZLMD and NACCDFT and name the new variable “Cognition”
I think this says to compute the mean across the first four columns for each subject.

 

/* NACZZMS NACCLMI NACCZLMD NACCDFT NACCAGEB */
cg = {0   .  1  2 23, 
      .   .  .  . 32,
      4   3  .  5 25,
      1   1  2  1 28};

/* for convenience, extract the first 4 columns */
X = cg[ ,1:4];      
cognition = X[ ,:]; /* mean for each subject */
print cognition;
smallCog = (cognition < 1.5 & cognition ^= .); /* 0/1 variable (or use loop) */
print cognition smallCog;
pransh
Calcite | Level 5

can we find each subject which are less then -1.5 using the loc function 

This is what I was thinking

 

small = loc(X[,1:4]<1.5 ; 
print (small) [c=varNames];

Rick_SAS
SAS Super FREQ

Yes, you can use the LOC function to find the row numbers. Add this to the end of my last program:

idx = loc(smallCog);
print idx;
pransh
Calcite | Level 5

oh got that.

and do u have an example where proc iml is used to run linear regression instead of proc reg

Rick_SAS
SAS Super FREQ

The SAS/IML User's Guide discusses linear regression in the Tutorial: 

Tutorial: A Module for Linear Regression

SAS Innovate 2025: Save the Date

 SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!

Save the date!

Multiple Linear Regression in SAS

Learn how to run multiple linear regression models with and without interactions, presented by SAS user Alex Chaplin.

Find more tutorials on the SAS Users YouTube channel.

From The DO Loop
Want more? Visit our blog for more articles like these.
Discussion stats
  • 8 replies
  • 1315 views
  • 1 like
  • 3 in conversation