Freq过程介绍
原文地址:http://www2.sas.com/proceedings/sugi31/252-31.pdf
转载请注明出处:
原文没有提供数据,所以就在网上随便找了个数据进行测试,地址如下:http://www.sasenterpriseminer.com/data/htwt.xls
该数据包含4个变量(性别sex,年龄age,身高height,体重weight),共237个观测。
1 Freq 语法
proc freq <options> ;
by variables ;
exact statistic-options < / computation-options> ;
output <OUT= dataset> options ;
tables requests < /options> ;
test options ;
weight variable ;
2 如果直接运行freq过程步,程序如下,它将会对所有的变量进行操作。
proc freq data=Htwt;
run;
部分结果:
FREQ 过程
sex
sex
------------------------------------------------------------------------------
f
m
3 tables:得到给定变量的频数统计,或多变量的交叉表频数统计。
proc freq data=Htwt;
tables sex;
run;
结果如上。
4 format:对连续数值变量做Freq时,系统会对每个数值进行频数统计,这个结果一般不是我们所需要的。我们一般会将连续变量转换为离散变量,这个可以通过Format过程步来实现。
proc format;
value height_ctg
value weight_ctg
proc freq data=Htwt;
tables weight*height;
format weight weight_ctg.;
format height height_ctg.;
run;
结果:
FREQ 过程
weight * height 表
weight(weight)
频数
百分比
行百分比|
列百分比|50-60
--------+--------+--------+
<90
--------+--------+--------+
90-110
--------+--------+--------+
>110
--------+--------+--------+
合计
37.97
5 norow nocol nopercent:有时我们只需要频数,不需要各行各列的百分比,我们就可以在tables后面加上这些参数。
proc freq data=Htwt;
tables weight*height/norow nocol nopercent;
format weight weight_ctg.;
format height height_ctg.;
run;
结果:
FREQ 过程
weight * height 表
weight(weight)
频数
--------+--------+--------+
<90
--------+--------+--------+
90-110
--------+--------+--------+
>110
合计
Norow:不要行的百分比
Nocol:不要列的百分比
Nopercent:不要频数的百分比
Nocum:单变量时不要累积频数和累积百分比
Nofreq:不要频数
Noprint:不打印
Nowarn:不输出警告信息
Missing:将缺失值也进行统计
6 对变量加label标识,使输出更直观
proc freq data=Htwt;
tables weight*height/norow nocol nopercent;
format weight weight_ctg.;
format height height_ctg.;
label weight = '高度';
label height = '重量';
run;
结果:
FREQ 过程
weight * height 表
weight(高度)
频数
--------+--------+--------+
<90
--------+--------+--------+
90-110
--------+--------+--------+
>110
合计
7 By:对这个变量的值进行分页显示
proc freq data=Htwt;
tables weight/norow nocol nopercent;
format weight weight_ctg.;
by sex;
run;
结果(以第一页为例)
----------------- sex=m ------------
8 out:输出数据集
proc freq data=Htwt;
tables weight/ out=htwtfreq;
format weight weight_ctg.;
run;
proc print data= htwtfreq;
run;
结果:
Obs
1
2
3
9 order选项:使输出按指定的order方式排序。
Order=data :按输入数据集的顺序排序
Order=formatted :按其formatted value排序
Order=freq :按计算的频数的降序排序
Order=internal :按其unformatted value排序
data htwttmp;
set htwt;
weight=round(weight);
run;
proc freq data=Htwttmp order=freq;
tables weight/ out=htwtfreq ;
run;
proc print data= htwtfreq(obs=10);
run;
结果:
Obs
10 list当对多个变量进行交叉频率操作,我们只需要频数和百分比时可以用到。
proc freq data=Htwttmp order=freq;
tables sex*weight/list out=htwtfreq ;
format weight weight_ctg.;
run;
proc print data= htwtfreq(obs=10);
run;
结果:
Obs
11 对缺失值和非缺失值进行频数统计
data Htwtmissing;
set Htwttmp;
if weight<100 then weight=.;
run;
proc format;
run;
proc freq data = Htwtmissing;
run;
结果:
age