SAS条件声明

时间:2015-01-12 00:27:14

标签: sas

此:

IF VAR1 ne VAR2 ne VAR3 ne VAR4;   

我希望这个条件检查是否:

  • VAR1不等于VAR2,VAR3,VAR4
  • VAR2不等于VAR1,VAR3,VAR4
  • VAR3不等于VAR1,VAR2,VAR4
  • VAR4不等于VAR2,VAR3,VAR1

这可能吗?

4 个答案:

答案 0 :(得分:5)

我认为对于四个变量情况,六个AN的IF可能是最好的。但是,如果你想这样做无限制,阵列解决方案是显而易见的;这里的工作比需要的多,但工作量少于10个变量 - > 45 ifs。

data want;
  set have;
  match=0;
  array vars var:;
  do _t = 1 to dim(vars)-1;
    do _u = _t+1 to dim(vars);
      if vars[_t] = vars[_u] then match=1;
    end;
    if match=1 then leave;
  end;
run;

这与6 if(测试1 vs 2,3,4,测试2 vs 3,4,测试3 vs 4)相同,但是采用数组/循环形式。

答案 1 :(得分:1)

有两种选择。在and之间以长格形式执行:

VAR1 ne VAR2 and VAR1 ne VAR3 and VAR1 ne VAR4 and 
VAR2 ne VAR3 and VAR2 ne VAR4 and VAR3 ne VAR4

或者使用等于TRUE值的数字作为1进行测试:

sum(VAR1 = VAR2,
VAR1 = VAR3,
VAR1 = VAR4,
VAR2 = VAR3,
VAR2 = VAR4,
VAR3 = VAR4) = 0

答案 2 :(得分:-1)

您可以使用:

if var1=var2=var3=var4 then ...

这有一些限制,但我现在无法回想起它们。在直接的IF条件下,我认为没关系。

答案 3 :(得分:-1)

或者:

if var1 ^in (var2 var3 var4) and
if var2 ^in (var3 var4) and
if var3 ^in (var4);
  • 或“不在”。