京公网安备 11010802034615号
经营许可证编号:京B2-20210330
一.使用PRINT过程步
1.PRINT过程步的基本使用
前面我们已经提到过利用PRINT过程步检查我们建立的SAS数据集的内容,实际上就是用PRINT过程步显示SAS数据集的内容。PRINT过程步由一个PROC PRINT语句开始,其一般形式为:
PROC PRINT options;

选项包括DATA=选项,它指定你使用的数据集,如果不使用该选项的话,系统使用最近用到的数据集。另外,在用PRINT过程步显示SAS数据集的内容之前,或者说,在一个程序的开头,往往需要用LIBNAME语句指定SAS数据库。例如:
libname clinic'c:\clinic';
proc printdata=clinic.admit;
run;
提交这段程序以后,SAS系统就会在OUTPUT窗口中显示该数据集的内容,我们把它称为报表(report)。例如:
|
ID |
NAME |
SEX |
AGE |
HEIGHT |
WEIGHT |
FEE |
|
2458 |
Murray, W |
M |
27 |
72 |
168 |
85.20 |
|
2462 |
Almers, C |
F |
34 |
66 |
152 |
124.80 |
|
2501 |
Bonaventure, T |
F |
31 |
61 |
123 |
149.75 |
2.控制产生的报表
在缺省情况下,PRINT过程步产生的报表会显示:
A.数据集中所有的观测和变量
B.在最左边一列显示观测号
C.变量根据它们在数据集中的顺序排列
为了得到你想要的报表,你可以对产生报表的过程进行控制,你可以:
A.利用系统选项控制报表的样式
B.选择显示变量和观测
C.对数据进行排序
D.加题注和尾注
E.显示描述性的变量标记
F.对数据规定格式
下面我们一一介绍如何进行控制。
3.设定系统选项
在你用PRINT过程步产生报表之前,你可以先设定一些系统选项控制报表的样式,包括:
|
选项 |
功能 |
|
LINESIZE= |
设定每行的长度 |
|
PAGESIZE= |
设定每页的行数 |
|
NUMBER|NONUMBER |
设定是否显示页码 |
|
PAGENO= |
设定开始页码 |
|
DATE|NODATE |
设定是否显示日期和时间 |
每一个系统选项都有缺省设置,例如,在缺省情况下,会自动显示页码。
你可以用以下任一方法改变这些系统选项:
1)用OPTIONS语句
一般形式为: OPTIONS options;
例如: options pagesize=20linesize=76;
options numberpageno=1;
OPTIONS语句可以出现在SAS程序的任意地方,从语句被执行的地方开始,设定的系统选项起作用,一直到你改变它的设置。
例如: options nonumber nodate;
proc printdata=sales.qtr3;
proc printdata=sales.qtr4;
options date;
run;
则在显示SALES.QTR3的时候页码和日期时间均不显示,而在显示SALES.QTR4的时候页码不显示但日期时间显示。注意,SAS系统要遇到DATA、PROC或RUN等关键词的时候才执行会执行前面一个程序步,因此,OPTIONS语句要遇到其后的这些关键词时才会被执行,但它会在其所属的程序步中优先执行。
2)用OPTIONS窗口
另一个改变系统选项的简单方法是进入OPTIONS窗口:
选择: Globals à Options àGlobal Options
找到想要设定的选项,作相应的改变即可。
4.NOOBS选项
你可以在PROC PRINT语句中使用NOOBS选项去掉报表中的观测号列。例如:
proc printdata=sales.qtr4 noobs;
run;
事实上,PROC PRINT语句中可以使用的选项很多,详细情况可利用HELP窗口查找:
Help à SAS System àREPORT WRITING àPRINT
5.选择变量
如果你的数据集中有很多变量,而你只希望显示其中的一部分,你可以在PRINT过程步中用VAR语句指定要显示的变量。其一般形式为:
VAR variables;
例如: var age height weight fee;
输出报表中的变量按照在VAR语句中出现的顺序排列。
注意,变量之间用空格分开。
6.选择观测
如果你只需要显示数据集中的某一部分观测,而不是所有的观测,你可以在PRINT过程步中用WHERE语句设定要显示的观测应满足的条件。
1)WHERE语句的一般形式为:
WHEREwhere-expression;
条件表达式的写法同第三章中所述相类似。例如:
whereweight<175;
where name='Almers,C';
注意,对字符型变量,条件表达式中的数据值用单引号括起,并且区分大小写。
2)复合条件
你也可以在多个条件的基础上选择你要显示的观测,这时候你可以在条件表达式中用AND(&)和OR(|)算符,例如:
where age<=55and weight >160; whereage<=55 & weight >160;
where fee=124.80 orfee=178.20; where fee=124.80 |fee=178.20;
3)IN算符
如果对同一个变量用多个值进行条件检验的话,可在条件表达式中用IN算符,例如:
where fee in(124.80,178.20);
4)多重复合条件
当你在条件表达式中用到一个以上AND(&)和OR(|)算符时,应该用括号来决定那些条件先复合,再与其它条件复合,例如:
where (age<=55and weight >160) or height >70;
where age<=55and (weight >160 or height >70);
显然是两个不同的条件。如果不加括号,则照前两个先复合的方法进行。
7.对数字型变量求和
你可以利用SUM语句对数字型变量求和,在输出的报表中,该变量所在列的最下方显示这一列数值的和。SUM语句的一般形式为:
SUM variables;
例如: proc print data=vcrsales;
varsalesrep region;
sumunitcost unit sold;
run;
在SUM语句中出现的变量名不需要在VAR语句中指定,也会在输出报表中显示。
8.对数据进行排序
如果你希望在报表中的观测是按照指定的顺序排列的话,就应当在利用PRINT过程步创建报表之前,用SORT过程步对数据进行排序。一个简单的SORT过程步的一般形式为:
PROC SORTDATA=SAS-data-set OUT=SAS-data-set;
BY variables;
RUN;
过程步以PROC SORT语句开始,其中,DATA=选项指明要读的数据集,BY语句是SORT过程步所必需的,它指明要按照哪个(那些)变量的值来进行排序。
OUT=选项指定一个输出数据集,在这个数据集中,所有的观测按指定的顺序排列。注意,如果不使用OUT=选项的话,在DATA=选项中指明的数据集就会被永久性地改变,而如果你只是希望它临时改变的话,就必须用OUT=选项指定一个临时的输出数据集。
9.题注(Titles)和尾注(Footnotes)
在SAS报表中,可以出现题注和尾注,题注出现在每一页的顶部,尾注出现在每一页的底部,如果没有定义,缺省的题注是‘The SAS System’,尾注不定义就不出现。
1)显示题注(Titles)
你可以改变输出报表中的题注,方法有:
A.用TITLES窗口
选择Globals à OptionsàTitles
进入TITLES窗口,在相应位置输入你希望作为题注的文字,
选择Edit à End
退出即可。
SAS系统允许有10个题注。
B.用TITLE语句
在产生报表的过程步中或之前用TITLE语句设定题注,其一般形式为:
TITLEn 'titletext';
例如: title1 'July Report';
title3 'group1';
用TITLE语句同样可以设定10个题注。
2)显示尾注(Footnotes)
你还可以改变输出报表中的尾注,方法与改变题注的方法相似:
A.用FOOTNOTES窗口
选择Globals à OptionsàFootnotes
进入FOOTNOTES窗口,在相应位置输入你希望作为尾注的文字,
选择Edit à End
退出即可。
SAS系统允许有10个尾注。
B.用FOOTNOOT语句
在产生报表的过程步中或之前用FOOTNOTE语句设定尾注,其一般形式为:
FOOTNOTEn 'footnotetext';
例如: footnote1 'PrepareedJuly 15';
footnote3 'byfinancial department';
用FOOTNOTE语句同样可以设定10个尾注。
3)改变题注和尾注的设定
题注和尾注的设定都是全局性的,设定以后,它们的作用一直延续到你重新设定或退出SAS系统。在设定了题注和尾注之后,你如果希望改变或取消这些设定的话,可用以下方法:
A.用TITLES 或FOOTNOTES窗口
进入TITLES 或FOOTNOTES窗口,改变或取消其中的设置。
B.用TITLE 或FOOTNOTE语句
用新的TITLE 或FOOTNOTE语句重新设定题注或尾注,新的设定会取代老的设定。
注意,新的TITLE 或FOOTNOTE语句被执行是,除了取代原先同样号码的题注或尾注之外,还会取消更大号码的题注或尾注。
用下列不加号码或不加文字的语句可取消所有的题注或尾注:
title1;
footnote;
10. 给变量设定描述性标记
如果某些变量名不足以表达该变量数据的性质,你希望在报表中以更准确的词句来作为这些列的标记的话,可以在过程步中使用LABEL语句,其一般形式为:
LABEL variable1='label'
Variable2='label';
标记可长达40个字符,并且,必须用引号括起。
你可以用一个LABEL语句,也可以用多个LABEL语句来设定描述性标记。
另外,为了显示标记,在PROC PRINT语句中必须使用LABEL选项。例如:
proc printdata=clinic.therapy label;
var month wjr;
labelwjr='Walk/Jog/Run';
run;
11. 设定输出数据的格式
你可以利用FORMAT语句设定变量的输出格式,以使报表看上去更完美。FORMAT语句的一般形式为:
FORMAT variableformat-name;
例如: format net comma5.0 grosscomma8.2;
format netcommiss dollar9.2;
在某一个过程步中的FORMAT语句设定的输出数据的格式,仅在同一个过程步产生的报表中起作用。
SAS系统提供许多输出格式,可用于在FORMAT语句中使用。你可以在SAS的HELP穿口中找到所有 的SAS输出格式,方法为:
Help à SAS System à SASLANGUAGE à SASFormats and Infortmats
下面是部分常用格式:
|
格式 |
例 |
显示结果 |
|
COMMAw.d |
Comma8.2 |
1,123.20 |
|
DOLLARw.d |
Dollar6.2 |
$56.00 |
|
MMDDYYw. |
Mmddyy6. |
150599 |
|
w.d |
8.2 |
12203.90 |
12. 自定义输出格式
在SAS系统中,用户还可以用FORMAT过程自己定义输出格式,其一般形式为:
PROC FORMAT;
VALUEformat-name range1='label'
range2='label';
例如: proc format;
value$destfmt 'LON'='London'
'PAR'='Paris'
'HON'='Hongkong';
run;
然后在PRINT过程中的FORMAT语句中就可以自定义的输出格式了,例如:
(接上例) proc print data=summer;
vardate dest;
formatdata date7. Dest $destfmt;
run;
二.使用TABULATE过程步
使用PRINT过程步你可以以列表的形式显示数据集的内容,但有时候你可能更希望以表格的形式对数据集中的内容进行分析,这时候,就可以利用TABULATE过程步来帮助你进行这项工作。
1.用TABULATE过程步创建表格
事实上,TABULATE过程步并不是简单地显示数据集的内容,而是对数据集中的内容进行归纳统计以后,根据用户的要求,制作各式表格供用户分析使用。
TABULATE过程步能帮助你方便地设计你的报表,你可以自由决定表格的形式和结构,作出的表格可以是一维的、二维的或三维的。同时,TABULATE过程步能对数据集中的数据进行归纳统计,在表格中显示一些描述性统计量,例如:
A.SUM(和)
B.MEAN(均值)
C.MINIMUM(最小值)
D.MAXIMUM(最大值)
F.VARIANCE(方差)
等等。
你也可以在TABULATE过程步中进行选择观测、设定描述性标记、设定题注和尾注、给数据规定输出格式等操作。
2.设计表格
使用TABULATE过程步的关键是计划,与PRINT过程步不同,TABULATE过程步不会产生缺省的报表,你必须告诉它如何创建表格,因此,在使用TABULATE过程步之前,最好先画一个草表,以明确你自己到底想要得到一个什么样的表格。具体说,你需要决定:
A.使用什么数据
B.用什么变量对数据分类
C.对什么变量进行分析
D.表格的形式
3.基本的TABULATE过程步
一个简单的TABULATE过程步包含以下四条基本语句:
|
语句 |
功能 |
|
PROC TABULATE |
启动过程步,设定数据集 |
|
CLASS |
设定分类变量 |
|
VAR |
设定分析变量 |
|
TABLE |
描述产生的表格 |
其中,PROC TABULATE语句作为TABULATE过程步的开头,是必须要有的,其一般形式为:
PROC TABULATEoptions;
例如: proc tabulatedata=clinic.admit;
其中,DATA=选项决定使用什么数据集。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
在大数据时代背景下,海量行业数据亟需通过专业化工具挖掘潜在价值,辅助企业业务决策、优化运营模式、规避经营风险。Python凭借 ...
2026-08-28SQL是数据分析领域最基础、最核心的工具,承担着取数、清洗、统计、分层、归因的全流程工作。不同于单纯的语法练习,实战化SQL数 ...
2026-08-28 很多企业团队并非缺乏指标,而是陷入“指标失控”:仪表盘上堆满实时跳动的数据,却无法回答“当前瓶颈在哪、下一步该做什么 ...
2026-08-28随着新零售模式的快速普及,零售行业从传统的“货品驱动”全面转向“用户驱动”。门店交易数据、线上消费记录、浏览轨迹、复购频 ...
2026-08-27在数据分析、爬虫采集、接口开发、数据归档等场景中,JSON与CSV是两种使用率最高的数据存储格式。JSON为键值对结构化格式,适配 ...
2026-08-27 很多数据分析师每天都在计算指标、制作报表,但当被问到“什么叫指标数据元”“指标数据标准包含哪些核心维度”“指标数据质 ...
2026-08-27在数据分析工作中,时间序列是最常见的数据类型之一,订单时间、日志时间、交易时段、统计周期等数据均离不开时间处理。原始数据 ...
2026-08-26在数据分析与数据预处理工作中,原始数据普遍存在录入错误、系统故障、偶然极值等问题,极易产生异常数据。异常数据会严重干扰数 ...
2026-08-26 很多数据分析师能熟练写SQL、做透视表,但当被问到“数据是从哪里来的?经过哪些加工才进入数据仓库?ETL具体做了什么?”时 ...
2026-08-26在数理统计与数据分析领域,多因素方差分析与线性回归模型是研究变量关系、因素影响、数据差异规律的两大核心工具。二者均属于经 ...
2026-08-25数据分析的核心价值不在于数据计算与图表制作,而在于清晰、精准、有逻辑地输出结论、支撑业务决策。日常数据分析报告普遍存在结 ...
2026-08-25 很多数据分析师能熟练地写SQL、做透视表、算描述性统计,但当被问到“如何预测用户流失概率”“如何归因销量下滑的关键因素 ...
2026-08-25平均数是数据分析、数理统计与日常运算中最基础、最常用的统计量,核心作用是浓缩一组数据的整体水平、刻画数据集中趋势。在众多 ...
2026-08-24在MySQL数据库中,InnoDB存储引擎作为主流事务型引擎,默认事务隔离级别为可重复读(Repeatable Read,RR),这与SQL Server、Or ...
2026-08-24 很多数据分析师拿到数据就开始清洗、建模,但当被问到“这批数据属于什么类型——结构化还是非结构化?分类变量还是数值变量 ...
2026-08-24 很多数据分析师画过趋势图、做过业绩预测,但当被问到“这个月销售额增长20%,到底是长期趋势自然增长,还是促销活动的短期 ...
2026-08-21在数据分析与数据可视化工作中,直方图是展示数据分布特征、离散程度、集中区间的核心图表,能够直观呈现数值数据的频次分布规律 ...
2026-08-20在数据分析领域有一句核心准则:垃圾数据进,垃圾数据出。数据清洗是数据分析、数据建模、数据可视化之前的必经前置工序,也是保 ...
2026-08-20 很多数据分析师做过按月份的销售额趋势图,画过按天的流量折线图,但当被问到“时间序列和普通数据有什么本质区别”“季节性 ...
2026-08-20在Python数据分析与数据清洗工作中,Pandas是最核心的数据处理库,DataFrame是结构化数据的标准存储格式。在实时数据采集、循环 ...
2026-08-19