As the first step in the decommissioning of sasCommunity.org the site has been converted to read-only mode.


Here are some tips for How to share your SAS knowledge with your professional network.


Truth Table

From sasCommunity
Jump to: navigation, search

Author: Ronald_J._Fehd

Truth Table

This program shows how to write statements which implement the following types of logic:

  • boolean, binary-valued: in (0,1)
  • DeMorgan's Laws
  • fuzzy  : in (0,0.5,1)
  • trinary: in (.,0,1)
 /*name    : TruthTable
description: make data set of values and logical combinations
purpose    : illustrate binary and trinary logical evaluation
RJF2 2003May27
DeMorgan's Laws:
~(p ^ q) <=> ~p v ~q
~(p v q) <=> ~p ^ ~q
tilde ~ :: not
caret ^ :: and
      v :: or
    <=> :: is equivalent to
not (p and q) <=> not p or  not q
not (p  or q) <=> not p and not q
*** ................................. */
%Let ProgName = TruthTable;
 
%Let List = .,0    ,1;
%Let List =   0,0.5,1;
%Let List =   0    ,1;
 
Title "&Progname. with P and Q in (&List.)";
 
PROC  Format;
value TF . = 'NA'
         0 = 'F'
         1 = 'T'
     other = '?';*between zero and one;
 
DATA   Truth_Table;
length default = 4;
label  P      = 'P'
       Q      = 'Q'
       notP   = 'not P'
       and    = 'and(P,Q)'
       or     = 'or(P,Q)'
       bxor   = 'bxor(P,Q)'
       xor1   = 'xor(P,Q)'
       xor2   = 'xor(P,Q)'
       xor3   = 'xor2 no parens'
       DeM1a  = 'not( and(P,Q) )'
       DeM1b  = 'notP or notQ'
       DeM2a  = 'not( or(P,Q) )'
       DeM2b  = 'notP and notQ'
       FLmin  = 'fuzzy logic and min(P,Q)'
       FLmax  = 'fuzzy logic or max(P,Q)'
       FLnotP = 'fuzzy logic not 1 - P'
       ;
format _numeric_ TF.;
 
do    P = &List.;
   do Q = &List.;
      notP   = not P;
      and    = P and Q;
      or     = P or  Q;
      bxor   = bxor(P,Q);
      xor1   = P and not Q or not P and Q;
      xor2   = not(P and Q) and not(not P and not Q);
      xor3   = not P and Q  and not not P and not Q ;
      DeM1a  = not(P and Q);
      DeM1b  = not P or not Q;
      DeM2a  = not(P or Q);
      DeM2b  = not P and not Q;
      FLmin  = min(P,Q);
      FLmax  = max(P,Q);
      FLnotP = 1 - P;
      output;
      end;*do Q;
   end;   *do P;
stop;
run;
 
PROC Print data = Truth_Table
                  label noobs;
run;

References

-- created by User:Rjf2 10:26, 20 August 2007 (EDT)

--Ronald_J._Fehd macro.maven == the radical programmer