Sas:如何在 proc sql 中使用 having 子句


您可以使用 SAS 中PROC SQL中的HAVING子句来过滤满足特定条件的行。

请注意WHEREHAVING子句之间的细微差别:

  • WHERE在分组发生之前过滤行。
  • HAVING过滤任何分组后的行。

以下示例展示了如何在实践中使用HAVING子句。

示例:如何在 PROC SQL 中使用 HAVING 子句

假设我们在 SAS 中有以下数据集,其中包含有关各种篮球运动员的信息:

 /*create dataset*/
data my_data;
    input team $position $points;
    datalines ;
A Guard 22
A Guard 20
A Guard 30
A Forward 14
A Forward 11
B Guard 12
B Guard 22
B Forward 30
B Forward 9
B Forward 12
B Forward 25
C Guard 22
C Guard 19
C Guard 10
;
run ;

/*view dataset*/
proc print data =my_data; 

我们可以使用以下代码来计算每个球队(其中球员是后卫)的得分总和,然后过滤结果以仅显示总和大于 50 的球队:

 proc sql ;
    select team, sum(points) as sum_points
    from my_data
    where position='Guard'
    group by team
    having sum_points > 50 ;
quit ; 

这段代码的具体工作原理如下:

  • 首先,我们使用SELECT选择球队和积分总和
  • 然后我们使用WHERE来过滤位置为“Guard”的行
  • 接下来,我们使用GROUP按团队对结果进行分组
  • 接下来,我们使用HAVING过滤总分 > 50 的球队。

如果我们没有包含HAVING语句,该查询的结果将如下所示:

 proc sql ;
    select team, sum(points) as sum_points
    from my_data
    where position='Guard'
    group by team;
quit ; 

请注意,B 队的积分总和不超过 50。

因此,当我们在前面的示例中使用HAVING语句时,我们过滤掉了 B 队,因为他们的积分总和不大于 50。

其他资源

以下教程解释了如何在 SAS 中执行其他常见任务:

SAS:如何在 PROC SQL 中使用 LIKE 运算符
SAS:如何在 PROC SQL 中使用 IN 运算符
SAS:如何在 PROC SQL 中使用 WHERE 运算符

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注