带多个条件的SAS WHERE语句

带多个条件的SAS WHERE语句,sas,where,Sas,Where,在SAS PROC FREQ中,使用带有多个条件的WHERE语句,我想了解为什么添加条件会导致频率增加 第一种情况: PROC FREQ; WHERE X=1 AND Y=1; TABLE YEARS; RUN; 特定年份的输出N=100 但是: 同一年的输出大于上一年的N,例如,N=200 在第二个FREQ和WHERE语句中,我认为括号中的条件应该首先计算,在and…OR之前,并且应该选择与第一个WHERE语句相同的N=100。然后,行中剩余的条件,A=2或B=2,应该选择N=100的子集,

在SAS PROC FREQ中,使用带有多个条件的WHERE语句,我想了解为什么添加条件会导致频率增加

第一种情况:

PROC FREQ;
WHERE X=1 AND Y=1;
TABLE YEARS;
RUN;
特定年份的输出N=100

但是:

同一年的输出大于上一年的N,例如,N=200

在第二个FREQ和WHERE语句中,我认为括号中的条件应该首先计算,在and…OR之前,并且应该选择与第一个WHERE语句相同的N=100。然后,行中剩余的条件,A=2或B=2,应该选择N=100的子集,A=2或B=2。因此,所选N应小于或等于100,但不大于100

这就是我想要的-(X=1和Y=1)的子集 也有A=2或B=2,但这似乎不是我得到的。建议

这是我想要的正确说法吗

式中(X=1,Y=1,A=2)或(X=1,Y=1,B=2)

谢谢。

在逻辑表达式中添加未嵌套的
将始终导致结果集保持不变或变大

您需要使用括号来更改求值顺序。如果没有括号,将首先计算所有
表达式,然后计算
表达式

从文件中

处理复合表达式

当SAS遇到复合物时 表达式(多个条件),软件遵循规则 确定计算每个表达式的顺序。何时何地 组合表达式后,SAS将以特定的方式处理条件 订单:

  • 首先处理NOT表达式
  • 然后处理和连接的表达式
  • 最后,处理由或连接的表达式 使用括号控制评估顺序

    即使SAS按特定顺序计算逻辑运算符,您也可以 通过在括号中嵌套表达式来控制计算顺序。 也就是说,括号中的表达式在一个表达式之前处理 没有附上。最里面的一组括号中的表达式 首先处理,然后是下一个,向外移动,直到 所有括号都已处理

    例如,假设您想要一个 同时具有SAS/GRAPH和SAS/STAT的所有加拿大站点的列表 软件,因此发出以下表达式:

      where product='GRAPH' or product='STAT' and country='Canada';
    
    然而,结果包括所有许可SAS/GRAPH软件的站点以及加拿大 许可SAS/STAT软件的站点。为了得到正确的结果, 您可以使用括号,这会导致SAS评估比较 首先在括号内,提供包含以下内容的站点列表: 产品许可证,然后将结果用于剩余条件:

    where (product='GRAPH' or product='STAT') and country='Canada';
    
    那么你的

    WHERE (X=1 AND Y=1) AND A=2 OR B=2;
    

    WHERE (X=1 AND Y=1 AND A=2) OR B=2;
    
    这就是我想在问题中描述的

    WHERE (X=1 AND Y=1) AND (A=2 OR B=2);
    
    哪个是相同的

    无论您如何陈述表达式,添加
    始终有可能增加符合表达式的项目数。未嵌套的
    将有可能选择比嵌套的(或插入括号的)
    更多的项。向逻辑表达式添加未嵌套的
    将始终导致结果集保持不变或变大

    您需要使用括号来更改求值顺序。如果没有括号,将首先计算所有
    表达式,然后计算
    表达式

    从文件中

    处理复合表达式

    当SAS遇到复合物时 表达式(多个条件),软件遵循规则 确定计算每个表达式的顺序。何时何地 组合表达式后,SAS将以特定的方式处理条件 订单:

  • 首先处理NOT表达式
  • 然后处理和连接的表达式
  • 最后,处理由或连接的表达式 使用括号控制评估顺序

    即使SAS按特定顺序计算逻辑运算符,您也可以 通过在括号中嵌套表达式来控制计算顺序。 也就是说,括号中的表达式在一个表达式之前处理 没有附上。最里面的一组括号中的表达式 首先处理,然后是下一个,向外移动,直到 所有括号都已处理

    例如,假设您想要一个 同时具有SAS/GRAPH和SAS/STAT的所有加拿大站点的列表 软件,因此发出以下表达式:

      where product='GRAPH' or product='STAT' and country='Canada';
    
    然而,结果包括所有许可SAS/GRAPH软件的站点以及加拿大 许可SAS/STAT软件的站点。为了得到正确的结果, 您可以使用括号,这会导致SAS评估比较 首先在括号内,提供包含以下内容的站点列表: 产品许可证,然后将结果用于剩余条件:

    where (product='GRAPH' or product='STAT') and country='Canada';
    
    那么你的

    WHERE (X=1 AND Y=1) AND A=2 OR B=2;
    

    WHERE (X=1 AND Y=1 AND A=2) OR B=2;
    
    这就是我想在问题中描述的

    WHERE (X=1 AND Y=1) AND (A=2 OR B=2);
    
    哪个是相同的

    无论您如何陈述表达式,添加
    始终有可能增加符合表达式的项目数。未嵌套的
    可以选择比嵌套的(或插入括号的)
    更多的项目