1. 作用
输出数据集中的观测
2. 语法
语法如下
PROC PRINT <option(s)>;
也就是可以不加任何参数,最简单的形式即 PROC PRINT;
3. 示例
样本数据采用Sashelp中的数据集Class,原始数据如图1所示:
![](https://img-blog.csdnimg.cn/20200729215110325.png)
3.1 输出全部数据
默认会输出数据集的全部观测和全部变量,并在最左边加一列Obs列,表示行号(Observation number)
程序如下:
proc print data=Sashelp.Class;
run;
输出如下:
![](https://img-blog.csdnimg.cn/20200729215259129.png)
3.2 只输出部分变量
可以使用var语句来只输出部分变量,比如只输出姓名和身高:
proc print data=Sashelp.Class;
var Name Height;
run;
![](https://img-blog.csdnimg.cn/20200729215558183.png)
3.3 只输出部分观测
3.3.1 使用Where语句
可以使用where语句指定一些条件
比较
比如输出年龄大于14岁的(注意这里可以使用gt, lt, eq, ge,le,ne,并且即可以用于数值型,也可以用于比较字符型,比较字符型时,加上单引号)
proc print data=Sashelp.Class;
where Age gt 14;
run;
![](https://img-blog.csdnimg.cn/20200729215943163.png)
子集判断
输出年龄为13、14岁的:
proc print data=Sashelp.Class;
where Age in (13, 14);
run;
包含
使用CONTAINS或者?, 输出姓名中包含‘斯’的:
proc print data=Sashelp.Class;
where Name CONTAINS '斯';
run;
![](https://img-blog.csdnimg.cn/20200729220727693.png)
多个条件
可以使用AND或者OR控制多个条件,例如输出年龄大于14岁,并且体重小于120或者身高小于70的
proc print data=Sashelp.Class;
where Age gt 14 and (Weight lt 120 or Height lt 70);
run;
![](https://img-blog.csdnimg.cn/20200729221148994.png)
3.3.2 使用FIRSTOBS和OBS
FIRSTOBS和OBS是全局选项,FIRSTOBS表示从第几行开始默认值为1; OBS表示到第几行结束,默认值分别MAX。一旦设置之后,影响整个程序所有的PROC PRINT。
例如只输出10-12行:
OPTIONS FIRSTOBS=10;
OPTIONS OBS=12;
proc print data=Sashelp.Class;
run;
![](https://img-blog.csdnimg.cn/20200729221613480.png)
当然,也可以在print选项中指定,那么它只影响当前的PRINT:
OPTIONS FIRSTOBS=10;
OPTIONS OBS=12;
proc print data=Sashelp.Class (FIRSTOBS=1 OBS=5);
run;
![](https://img-blog.csdnimg.cn/20200729221829191.png)
3.4 排序
使用PROC SORT进行排序,其实排序已经超出了PROC PRINT范畴,它会对数据进行原地排序(如果指定了OUT选项,才会将排序后的数据放到OUT指定的数据集中)。 例如根据年龄和身高进行排序,排序后的数据存放到Work.srtdClss中:
proc sort data=Sashelp.Class out=Work.srtdClss;
by Age Height;
run;
proc print data=Work.srtdClss;
run;
![](https://img-blog.csdnimg.cn/20200729222719380.png)
3.5 求和
使用SUM语句来求年龄15岁的人的身高之和、体重之和:
proc print data=Sashelp.Class;
where age eq 15;
SUM Height Weight;
run;
![](https://img-blog.csdnimg.cn/20200729223144824.png)
3.6 分组
使用BY语句进行分组,按照年龄分组,求每一组人的身高之和、体重之和,只要15岁以上的数据,这里要求已经排好序(如果不排好序,是不会进行真正的分组的):
proc print data=Work.srtdClss;
VAR age Height Weight;
BY age;
WHERE age ge 15;
SUM Height Weight;
run;
![](https://img-blog.csdnimg.cn/20200729224019665.png)
注意,上面的输出中是分了两组的,一组是15岁的,一组是16岁的。输出中表格的Obs列不太好看,可以使用ID语句代替它
proc print data=Work.srtdClss;
VAR age Height Weight;
BY age;
WHERE age ge 15;
SUM Height Weight;
ID age;
run;
![](https://img-blog.csdnimg.cn/20200729224349543.png)
上面这个例子中,age列出现了两次,是因为在VAR语句和ID语句中都出现了,可以去掉VAR语句中的age。