Hi SAS experts,
We use:
'01AUG2022'D <= birthdate <= '05AUG2022'D (to derive birthdates that fall BETWEEN Aug 1st and Aug 5, 2022)
What operators do we use to say NOT BETWEEN ?
Thanks,
NOT ('01AUG2022'D <= birthdate <= '05AUG2022'D)
birthdate < '01AUG2022'D & birthdate >'05AUG2022'D
Two options...first is easier to understand.
Thank you, Reeza!
It works fine. I am curious if there is any way we can get rid of this naughty 'NOT' too in the code😄.
I mean two (<=) means BETWEEN. Shouldn't there be some operator(s) that does not require support of any letters ?
Let's see if any SASsy guys or people from SAS headquarters chime in.
Thanks,
See how base SAS translates NOT BETWEEN :
5 data want;
6 set sashelp.class;
7 where height NOT between 60 and 100;
8 run;
NOTE: There were 7 observations read from the data set SASHELP.CLASS.
WHERE not (height>=60 and height<=100);
NOTE: The data set WORK.WANT has 7 observations and 5 variables.
NOTE: DATA statement used (Total process time):
real time 0.01 seconds
cpu time 0.00 seconds
Koen
@inquistive wrote:
I mean two (<=) means BETWEEN. Shouldn't there be some operator(s) that does not require support of any letters ?
Let's see if any SASsy guys or people from SAS headquarters chime in.
Thanks,
So instead of the word NOT you want a symbol?
There are a few but tilde is the simplest one, it depends on your OS.
∘ ¬ ~
Something like:
1 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK; 68 69 data want; 70 set sashelp.class; 71 72 where ~( 12 < age <14); 73 run; NOTE: There were 16 observations read from the data set SASHELP.CLASS. WHERE not (age>12 and age<14); NOTE: The data set WORK.WANT has 16 observations and 5 variables. NOTE: DATA statement used (Total process time): real time 0.00 seconds user cpu time 0.01 seconds system cpu time 0.00 seconds memory 704.37k OS Memory 25764.00k Timestamp 08/05/2022 07:19:12 PM Step Count 24 Switch Count 2 Page Faults 0 Page Reclaims 226 Page Swaps 0 Voluntary Context Switches 10 Involuntary Context Switches 0 Block Input Operations 0 Block Output Operations 264
Symbol/Mnemonic |
Description |
Example |
---|---|---|
& or AND |
If both of the quantities linked by an AND are 1 (true), then the result of the AND operation is 1. Otherwise, the result is 0. |
|
| or OR1 |
If either of the quantities linked by an OR is 1 (true), then the result of the OR operation is 1 (true). Otherwise, the OR operation produces a 0. |
|
! or OR |
|
|
¦ or OR |
|
|
¬ or NOT2 |
|
|
∘ or NOT |
|
|
~ or NOT |
|
|
1 The symbol that you use for OR depends on your operating environment. | ||
2 The symbol that you use for NOT depends on your operating environment. |
I am curious if there is any way we can get rid of this naughty 'NOT' too in the code
The language is set up to do certain things in certain ways. Why do you want to avoid the designed way to do things? Why is having NOT in your code even an issue? (And others have shown methods of doing this without using NOT)
Be happy that you can use words. Special characters are often not available on different platforms; the 26 characters are always there, and never cause unexpected issues. Just see what happens when you use <> in SAS instead of "ne".
@Reeza wrote:
NOT ('01AUG2022'D <= birthdate <= '05AUG2022'D) birthdate < '01AUG2022'D & birthdate >'05AUG2022'D
Two options...first is easier to understand.
I hope option 2 should be "OR", not "&"
birthdate < '01AUG2022'D OR birthdate >'05AUG2022'D
You could also let SAS tell you how it translates it.
2568 data test; 2569 set sashelp.class; 2570 where not (13 <= age <= 14) ; 2571 run; NOTE: There were 12 observations read from the data set SASHELP.CLASS. WHERE not (age>=13 and age<=14); NOTE: The data set WORK.TEST has 12 observations and 5 variables.
So if you apply De Morgan's Law you get one of these:
WHERE not (age>=13) or not (age<=14);
WHERE (age<13) or (age>14);
Probably, which is why the NOT is much easier 😄
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.