admin 管理员组

文章数量: 1086019


2024年1月9日发(作者:keep on stacking)

sas group by 用法

SAS GROUP BY 用法

GROUP BY 语句用于将数据按照一个或多个变量进行分组,并对每个组进行聚合计算。在 SAS 中,GROUP BY 常常与其他语句一起使用,例如 SELECT 、 HAVING 和 ORDER BY 等。以下是一些常见的 GROUP

BY 用法及其详细解释:

1. 单个变量进行分组

GROUP BY 语句可以将数据按照单个变量进行分组,并对每个组进行汇总统计。以下是一个示例:

PROC SQL;

SELECT gender, COUNT(*) AS count

FROM dataset

GROUP BY gender;

QUIT;

在上述示例中,我们将数据集根据性别进行分组,然后计算每个组的数量。

2. 多个变量进行分组

GROUP BY 语句也可以根据多个变量进行分组。多个变量之间用逗号分隔。以下是一个示例:

PROC SQL;

SELECT gender, age, COUNT(*) AS count

FROM dataset

GROUP BY gender, age;

QUIT;

在上述示例中,我们将数据集根据性别和年龄同时进行分组,然后计算每个组的数量。

3. 使用聚合函数

GROUP BY 语句通常与聚合函数一起使用,以对每个组进行计算并返回汇总结果。聚合函数可以用于计算总和、平均值、最大值、最小值等。以下是一些常用的聚合函数和示例:

• COUNT:计算每个组中的观测数量。

• SUM:计算每个组中某个变量的总和。

• AVG:计算每个组中某个变量的平均值。

• MAX:找出每个组中某个变量的最大值。

• MIN:找出每个组中某个变量的最小值。

PROC SQL;

SELECT gender, COUNT(*) AS count, SUM(salary) AS total_salary

FROM dataset

GROUP BY gender;

QUIT;

在上述示例中,我们计算了每个性别组中的观测数量和薪水总和。

4. 使用 HAVING 子句

HAVING 子句可用于在 GROUP BY 语句中筛选符合指定条件的组。它的作用类似于 WHERE 子句,但 WHERE 子句对每个观测进行筛选,而 HAVING 子句对每个组进行筛选。以下是一个示例:

PROC SQL;

SELECT gender, AVG(salary) AS avg_salary

FROM dataset

GROUP BY gender

HAVING avg_salary > 5000;

QUIT;

在上述示例中,我们筛选出平均薪水大于 5000 的性别组。

5. 使用 ORDER BY 子句

ORDER BY 子句可用于对分组结果按照指定的顺序进行排序。以下是一个示例:

PROC SQL;

SELECT gender, age, COUNT(*) AS count

FROM dataset

GROUP BY gender, age

ORDER BY count DESC;

QUIT;

在上述示例中,我们将分组结果按照观测数量的降序进行排序。

总结:对于 GROUP BY 用法,我们可以根据单个变量或多个变量进行分组,在分组的基础上使用聚合函数进行计算,并可以使用

HAVING 子句和 ORDER BY 子句进行筛选和排序。这些用法可以帮助我们更好地理解和处理数据。

6. 使用 GROUP BY 和其他查询语句的组合

GROUP BY 语句可以与其他查询语句进行组合,以实现更复杂的数据分析需求。下面是几种常见的组合用法:

使用 GROUP BY 和 WHERE 子句

PROC SQL;

SELECT gender, age, COUNT(*) AS count

FROM dataset

WHERE salary > 3000

GROUP BY gender, age;

QUIT;

在上述示例中,我们将数据集根据性别和年龄分组,并计算在薪水大于3000的观测中,每个组的数量。

使用 GROUP BY 和 DISTINCT 关键词

PROC SQL;

SELECT gender, COUNT(DISTINCT age) AS distinct_age

FROM dataset

GROUP BY gender;

QUIT;

在上述示例中,我们计算了每个性别组中不同年龄的数量。通过在 COUNT 函数中使用 DISTINCT 关键词,我们确保计算的是唯一年龄值的数量。

使用 GROUP BY 和子查询

PROC SQL;

SELECT gender, age, salary

FROM dataset

WHERE salary > (SELECT AVG(salary) FROM dataset)

GROUP BY gender, age;

QUIT;

在上述示例中,我们根据性别和年龄分组,并选择薪水高于整个数据集平均薪水的观测。

7. 高级用法

除了上述常见的用法之外,GROUP BY 还可以与其他函数和语句进行组合,从而实现更多数据处理的需求。以下是一些高级用法的示例:

使用 PROC MEANS 进行分组汇总

PROC MEANS DATA=dataset NOPRINT;

VAR salary;

CLASS gender age;

OUTPUT OUT=summary

N=N

MEAN=mean_salary

MAX=max_salary

MIN=min_salary;

RUN;

PROC PRINT DATA=summary;

RUN;

在上述示例中,我们使用 PROC MEANS 对数据集进行分组汇总。其中 CLASS 语句用于定义分组变量,输出结果保存在 summary 数据集中,可以通过 PROC PRINT 进行查看。

使用 PROC SQL 进行多重分组和计算

PROC SQL;

CREATE TABLE summary AS

SELECT gender, age, SUM(salary) AS total_salary

FROM dataset

GROUP BY ROLLUP(gender, age);

QUIT;

PROC PRINT DATA=summary;

RUN;

在上述示例中,我们使用 GROUP BY ROLLUP 对性别和年龄进行多重分组,并计算每个组的薪水总和。ROLLUP 关键词可以生成一个汇总行,表示所有的分组组合。

以上是一些关于 SAS GROUP BY 用法的示例和详细讲解。通过灵活运用 GROUP BY 语句,我们能够更好地理解和处理数据,并得到所需的汇总结果或统计信息。


本文标签: 进行 分组 计算 变量