Hello,
I have codes shown as below, I am wondering if I could simply the WHERE condition better.
proc sql; create table lab&rr as select studysite,caseid,PCR,H3N2,FluA,FluAH1,FluAsub1,FluAsub2 from ds3 where PCR = 1 and (H3N2 = 1 or FluA = 1 or FluAH1 =1) and ((FluAsub2 ne 1 and FluAsub1 ne 1) or (FluAsub2 = 1 and FluAsub1 = 0) or (FluAsub2 = 0 and FluAsub1 = 1) ) order by studysite,caseid;
I feel the coding which is looking for either FluAsub1 or FluAsub2 is positive, is kind of long. I am not sure if there is a better way to write it. Thanks.
(FluAsub2 ne 1 and FluAsub1 ne 1) or (FluAsub2 = 1 and FluAsub1 = 0) or (FluAsub2 = 0 and FluAsub1 = 1)
How about
FluAsub2 + FluAsub1 < 2
(FluAsub2 ne 1 and FluAsub1 ne 1) or (FluAsub2 = 1 and FluAsub1 = 0) or (FluAsub2 = 0 and FluAsub1 = 1)
I get the last two of those conditions since either can be 1, should the first condition be ne though? Are you looking for either = 0 or either = 1? Typically it's 1, which means that should be eq not ne in the first condition?
You're either looking for:
not(fluAsub2 or fluAsub1)
or
(fluAsub2 or fluAsub1)
If I understand the condition right then you want to exclude the case where FluAsub1 = 1 and FluAsub2 = 1
and NOT (FluAsub1 = 1 and FluAsub2 = 1)
Or as a boolean expression (assuming these are flags with either 1 or 0)
and not (FluAsub1 and FluAsub2)
or...
and (not FluAsub1 or not FluAsub2)
That depends.
If your variables can only be 1 or 0, it can be simplified, e.g. to "not (FluAsub1 and FluAsub2)".
But if your code is written like that because one or both of them can be e.g. 8, -2342 or perhaps missing, then probably not.
It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.
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.