5.6 - Comparing Character Values5.6 - Comparing Character Values
All of the if-then-else statement examples we've encountered so far involved only numeric variables. Our comparisons could just as easily involve character variables. The key point to remember when comparing character values is that SAS distinguishes between uppercase and lowercase letters. That is, character values must be specified in the same case in which they appear in the data set. We say that SAS is "case-sensitive." Character values must also be enclosed in quotation marks.
Suppose our now infamous instructor wants to identify those students who either did not complete the course or failed. Because SAS is case-sensitive, any if-then-else statements written to identify the students have to check for those students whose status is 'failed' or 'Failed' or 'FAILED' or ... you get the idea. One rather tedious solution would be to check for all possible "typings" of the word "failed" and "incomp" (for incomplete). Alternatively, we could use the UPCASE function to first produce an uppercase value, and then make our comparisons only between uppercase values. The following SAS program takes such an approach:
DATA grades; length action $ 7 action2 $ 7; input name $ 1-15 e1 e2 e3 e4 p1 f1 status $; if (status = 'passed') then action = 'none'; else if (status = 'failed') then action = 'contact'; else if (status = 'incomp') then action = 'contact'; if (upcase(status) = 'PASSED') then action2 = 'none'; else if (upcase(status) = 'FAILED') then action2 = 'contact'; else if (upcase(status) = 'INCOMP') then action2 = 'contact'; DATALINES; Alexander Smith 78 82 86 69 97 80 passed John Simon 88 72 86 . 100 85 incomp Patricia Jones 98 92 92 99 99 93 PAssed Jack Benedict 54 63 71 49 82 69 FAILED Rene Porter 100 62 88 74 98 92 PASSED ; RUN; PROC PRINT data = grades; var name status action action2; RUN;
Launch and run the SAS program. Review the output from the PRINT procedure to convince yourself that the if-then-else statement that involves the creation of the variable action is inadequate while the one that uses the UPCASE function to create the variable action2 works like a charm.
By the way, when making comparisons that involve character values, you should know that SAS considers a missing character value (a blank space ' ') to be smaller than any letter, and so the good habit of programming for missing values holds when dealing with character variables as well.