实用SAS统计分析教程
前言:为什么学习SAS?
SAS (Statistical Analysis System) 是一款功能强大的商业智能、数据分析 and 报告软件,它在金融、医疗、制药、政府和学术界等领域应用广泛,被誉为数据分析领域的“行业标准”之一。

学习SAS的优势:
- 功能全面:从数据管理、统计分析到数据可视化、报告生成,一站式解决。
- 稳定可靠:作为商业软件,其计算结果和过程经过严格验证,适合处理大规模、高要求的数据。
- 就业导向:掌握SAS是许多数据分析、生物统计、数据科学岗位的硬性要求。
第一部分:SAS基础入门
第1章:认识SAS
-
SAS界面简介
- SAS增强型编辑器:编写和修改SAS代码的主要窗口,支持语法高亮、自动缩进。
- 日志窗口:显示代码执行过程、警告、错误和信息,是调试代码的关键。
- 输出窗口:展示程序运行产生的结果(如统计表格、图表)。
- 结果窗口:以树状结构管理输出窗口的内容,方便导航和查看。
- 资源管理器:类似于Windows的文件资源管理器,用于管理SAS数据集(
.sas7bdat)和其他文件。
-
SAS程序的基本结构 一个完整的SAS程序通常由两个主要部分构成:
- DATA步:用于创建、修改、处理数据集,可以理解为数据的“输入和加工”车间。
- PROC步:用于对数据集进行分析、报表生成和绘图,可以理解为数据的“分析和展示”车间。
基本语法规则:
(图片来源网络,侵删)- 每条SAS语句都以一个分号
- SAS对大小写不敏感(
data和DATA效果相同),但为了可读性,通常关键字大写,变量名小写。- 空格和换行不影响程序执行,但良好的缩进和格式是编程好习惯。
- SAS对大小写不敏感(
第二部分:核心技能掌握
第2章:数据步 - 数据的加工厂
数据步是SAS的灵魂,它像一条流水线,对数据进行读取、清洗、转换、合并等操作。
-
创建数据集 最常用的方式是直接在代码中输入数据。
/* 示例:创建一个名为 students 的数据集 */ DATA students; /* 使用 INPUT 语句定义变量名 */ /* $ 表示字符型变量 */ INPUT id name $ gender $ score1 score2; /* 使用 CARDS 语句开始数据输入 */ CARDS; 1 张三 男 85 90 2 李四 女 92 88 3 王五 男 78 85 4 赵六 女 88 92 ; RUN; /* RUN 语句执行 DATA 步 */ -
数据清洗与处理
- 选择变量:
KEEP和DROP语句。/* 只保留 id, name, score1 变量 */ DATA students_keep; SET students; /* SET 语句读取 students 数据集 */ KEEP id name score1; RUN; - 选择观测(行):
IF和WHERE语句。/* 只保留 score1 大于 85 的学生 */ DATA students_high; SET students; IF score1 > 85; RUN; - 创建新变量:直接赋值。
/* 计算平均分 */ DATA students_avg; SET students; average = (score1 + score2) / 2; RUN; - 处理缺失值:
IF ... THEN ... ELSE或MISSING()函数。/* score2 缺失,则用 0 填充 */ DATA students_fill; SET students; IF missing(score2) THEN score2 = 0; RUN;
- 选择变量:
第3章:PROC步 - 分析的展示台
PROC步调用SAS内置的“过程”(Procedure)来执行特定的分析任务,格式通常是 PROC 过程名 [选项]; ... RUN;。

-
基础描述性统计
- PROC MEANS:计算数值变量的描述性统计量(均值、标准差、最大值、最小值等)。
/* 计算 score1 和 score2 的均值、标准差、最大值、最小值 */ PROC MEANS DATA=students N MEAN STD MAX MIN; VAR score1 score2; RUN; - PROC FREQ:对分类变量进行频数分析。
/* 统计男女学生的人数 */ PROC FREQ DATA=students; TABLES gender; RUN;
- PROC MEANS:计算数值变量的描述性统计量(均值、标准差、最大值、最小值等)。
-
数据可视化
- PROC SGPLOT:现代、灵活的绘图过程,功能强大。
- 直方图:展示数据分布。
PROC SGPLOT DATA=students; HISTOGRAM score1; RUN; - 散点图:展示两个变量间的关系。
PROC SGPLOT DATA=students; SCATTER X=score1 Y=score2; XAXIS LABEL='第一次考试成绩'; YAXIS LABEL='第二次考试成绩'; RUN; - 箱线图:比较不同组别数据的分布。
PROC SGPLOT DATA=students; VBOX score1 / CATEGORY=gender; XAXIS LABEL='性别'; YAXIS LABEL='第一次考试成绩'; RUN;
- 直方图:展示数据分布。
- PROC SGPLOT:现代、灵活的绘图过程,功能强大。
第三部分:常用统计分析
这是将SAS应用于实际研究问题的核心部分。
第4章:T检验
用于比较两组数据的均值是否存在显著差异。
-
单样本T检验
- 问题:全班学生的平均分是否等于 85 分?
PROC TTEST DATA=students H0=85; VAR score1; RUN;
- 问题:全班学生的平均分是否等于 85 分?
-
独立样本T检验
- 问题:男生的平均分是否与女生的平均分有差异?
PROC TTEST DATA=students; CLASS gender; /* 指定分组变量 */ VAR score1; /* 指定分析变量 */ RUN;
- 问题:男生的平均分是否与女生的平均分有差异?
-
配对样本T检验
- 问题:学生的第一次和第二次考试成绩是否有显著差异?
PROC TTEST DATA=students; PAIRED score1*score2; RUN;
- 问题:学生的第一次和第二次考试成绩是否有显著差异?
第5章:方差分析
用于比较三组或以上数据的均值是否存在显著差异。
- 问题:不同专业的学生(假设我们有 major 变量)的平均分是否有差异?
/* 假设数据集中有 major 变量 */ PROC ANOVA DATA=students; CLASS major; MODEL score1 = major; MEANS major / TUKEY; /* 使用 Tukey 法进行两两比较 */ RUN;
第6章:卡方检验
用于分析分类变量之间是否存在关联。
- 问题:性别和是否通过考试(假设我们有 pass 变量,Y/N)之间是否有关联?
/* 假设数据集中有 pass 变量 */ PROC FREQ DATA=students; TABLES gender * pass / CHISQ; RUN; /* 输出结果中的 Chi-Square 值和 p-value 用于判断关联性 */
第7章:相关与回归
-
相关分析
- 问题:第一次和第二次考试成绩之间是否存在线性相关关系?
PROC CORR DATA=students; VAR score1 score2; RUN;
- 问题:第一次和第二次考试成绩之间是否存在线性相关关系?
-
线性回归
- 问题:用第一次考试成绩来预测第二次考试成绩。
PROC REG DATA=students; MODEL score2 = score1; /* score2 是因变量,score1 是自变量 */ OUTPUT OUT=reg_output P=predicted R=residuals; /* 输出预测值和残差 */ RUN; QUIT; /* PROC REG 后最好用 QUIT 结束 */
- 问题:用第一次考试成绩来预测第二次考试成绩。
第四部分:实用技巧与资源
第8章:实用技巧
-
使用
LIBNAME:LIBNAME是SAS的“盘符”,用于指定数据存储的路径。/* 将 D:\SASData\ 定义为 mylib */ LIBNAME mylib "D:\SASData\"; /* 将创建的数据集保存到 mylib 中 */ DATA mylib.students; SET students; RUN; /* 调用 mylib 中的数据集 */ PROC MEANS DATA=mylib.students; RUN; -
宏:用于重复执行相同的代码块,提高效率。
%MACRO print_means(var); PROC MEANS DATA=students; VAR &var; RUN; %MEND print_means; /* 调用宏,分析 score1 和 score2 */ %print_means(score1); %print_means(score2); -
输出控制:使用
ODS(Output Delivery System) 将输出导出为PDF、HTML、Excel等格式。ODS PDF FILE="C:\MyReports\Analysis_Report.pdf"; /* 在这里放置你的所有分析代码 */ PROC MEANS DATA=students; VAR score1 score2; RUN; PROC TTEST DATA=students; CLASS gender; VAR score1; RUN; ODS PDF CLOSE; /* 关闭输出文件 */
第9章:学习资源推荐
- 官方文档:SAS官方文档是最权威、最全面的资料,搜索 "SAS Documentation" 即可找到。
- 在线课程:
- Coursera / edX:搜索 "SAS Programming" 或 "Statistical Analysis with SAS",有顶尖大学和SAS官方提供的课程。
- SAS官方学习平台:SAS提供了大量的免费教程和认证路径。
- 书籍推荐:
- 《The Little SAS Book》:经典入门书籍,语言通俗易懂,适合零基础读者。
- 《SAS Programming for Statistical Data Analysis》:更侧重于统计分析应用。
- 社区与论坛:
- SAS Support Communities:官方技术社区,可以提问和查阅解决方案。
- Stack Overflow:使用
sas标签提问,有大量活跃的SAS开发者。
学习SAS是一个循序渐进的过程,请遵循以下路径:
- 熟悉环境:掌握SAS界面的基本操作。
- 掌握DATA步:这是所有工作的基础,务必熟练数据清洗和转换。
- 学习PROC步:从
MEANS,FREQ,SGPLOT开始,逐步过渡到T检验、方差分析、回归等核心统计过程。 - 勤加练习:找一份公开数据集(如Kaggle、UCI Machine Learning Repository),尝试用SAS完成一个完整的数据分析项目。
- 善用资源:遇到问题时,先查阅日志,再搜索官方文档和社区。
祝您学习顺利,早日成为SAS数据分析高手!
