## Negative if or then statements. What am I not seeing ?

Solved
Occasional Contributor
Posts: 13

# Negative if or then statements. What am I not seeing ?

I am producing a report on student's grades- how many start a Math or English course (Cohort=1), how many complete it (COMP) and how many have success (PASS). I thought that the section of code below would create  the variable 'PASS' with a value of 1 for each occurrence of  grades A, B, C and S and create a variable 'COMP'  with a value of 1 for every student who finished a course .

Rather than  list all the grades that constitute completion, I thought that I could use the 'not equal' condition for the grades that indicate non-completion  and create a positive counter for students who last to the bitter end.  This code does create the correct PASS values; BUT even though there are students that have grades of 'I', 'NC, and "W", all 10K+ students in the cohort have a 'COMP' variable with a value of 1.  If I  use one grade, i.e., If GRADE~=W" then COMP=1, all students with a 'W' grade have a COMP value of 0 and do not appear in the QUAPROPTER subset.

So what an I doing wrong?  I would bet my ex's alimony that I have used this combination before.

Thanks

IF TERM=>&COHO_TERM AND CRSE_NO>100 AND (COURSENAME='MAT' OR COURSENAME='ENG');

cohort=1

array a(*) _numeric_;

do i=1 to dim(a);

if a(i) = . then a(i) = 0;

end;

drop I;
KEEP SSN TERM COURSE CRSE_NO COURSENAME GRADE GOT COMPLETE PASS;

DATA  QUAPROPTER;/*test if the code works*/

IF COMPLETE=1;

PROC FREQ; TABLES COHO PASS COMP GRADE;

RUN;;

Accepted Solutions
Solution
‎08-25-2015 09:52 PM
Occasional Contributor
Posts: 13

## Re: Negative if or then statements. What am I not seeing ?

Thanks.  The easier way works.  I ma going to have mull over the logic issue though..

All Replies
Super User
Posts: 13,542

## Re: Negative if or then statements. What am I not seeing ?

Basic logic table negation of an or becomes AND

Try this for easier to read and maintain code:

if grade in ('A', 'B','C', 'S') then pass=1;

if grade not in ('I', 'NC', 'W') then comp = 1;

Solution
‎08-25-2015 09:52 PM
Occasional Contributor
Posts: 13

## Re: Negative if or then statements. What am I not seeing ?

Thanks.  The easier way works.  I ma going to have mull over the logic issue though..

Super User
Posts: 8,111

## Re: Negative if or then statements. What am I not seeing ?

The logic issue is easy to see if you just pick a specific value of GRADE and see what happens.

If GRADE is not I , NC or W then it is obviously true since all three sub conditions are true.

But if GRADE = 'I' then (GRADE~='I') is FALSE but the other two conditions are true so the overall condition is TRUE.

Similarly for NC or W.

🔒 This topic is solved and locked.