第05章 SAS服务过程.docx
《第05章 SAS服务过程.docx》由会员分享,可在线阅读,更多相关《第05章 SAS服务过程.docx(17页珍藏版)》请在冰豆网上搜索。
第05章SAS服务过程
第5章SAS服务过程
摘要:
SAS服务过程不直接给出统计值,但常被用于准备或整理统计资料。
主要包括PRINT、SORT、TRANSPOSE、FORMAT、STANDARD、PLOT和SCORE等过程。
§5.1PRINT过程
PRINT过程的功能是将SAS数据集的记录(观察值)以一定的方式显示或打印出来(输出),可以显示或打印其全部的变量或部分变量,也可打印出数值变量的总和。
利用此过程,可以创建从简单列表到可进行数据汇总的各种报告的各种不同的表单。
一、过程格式
PROCPRINT[选择项];
VAR变量表;
ID变量表;
BY变量表;
PAGEBY变量;
SUM变量表;
SUMBY变量;
二、语句说明
1.PROCPRINT语句选择项
DATA=指定输入数据集。
N打印观察值的个数。
ROUND小数打印时的输出格式,缺省为2位小数。
LABEL在输出的第一行中,用变量的标签代替变量名。
SPLIT=指定列间的分隔符。
NOOBS不输出观察值的序号。
UNIFORM要求所有输出页均采用同一格式。
2.PROCPRINT过程中常用语句
VAR语句规定只输出变量表中给定的变量。
ID语句用规定的变量代替观察的序号。
BY语句指定分组的变量。
PAGEBY语句指定分页变量(必须已经使用BY语句)。
SUM输出变量表中所列变量的和。
SUMBY语句当BY语句中的变量发生变化时对其求和(必须已经使用BY语句)。
例如:
dataaa;
inputxh$x1x2;
y=x1+x2*0.7;
cards;
0012565
0022470
0031435
0042680
0052345
procprintlabelnoobs;
labelxh="学号"x1="考察"x2="考试"y="总分";
run;
DATAh;
INPUTx$ab@@;
CARDS;
zhangsan12.2
lisi24.3
wangwu24.56
liuliu12.45
;
PROCSORT;
BYa;
PROCPRINTNOOBSROUND;
IDx;
BYa;
SUMb;
SUMBYa;
RUN;
输出结果:
---------A=1--------
XB
zhangsan2.20
liuliu2.45
----
A4.65
---------A=2--------
XB
lisi4.30
wangwu4.56
-----
A8.86
=====
13.51
§5.2SORT过程
SORT过程可将数据集中的观察值按一个或多个变量的值进行排序,以便其他的SAS过程利用BY语句对其进行分组处理。
排序后的观察值存放在一个新的SAS数据集中或替代原数据集。
当排序变量为数值型时,依从小到大的顺序进行比较;当排序变量为字符型时,依ASCII码值,从小到大的顺序进行比较;在多个排序变量时,在较前的排序变量值相等时,对较后的变量值进行比较。
一、过程格式
PROCSORT选择项;
BY[DEXCENDING]变量表;
二、语句说明
常用选项有:
1.DATA=数据集名指定要进行排序的数据集,若省略,则使用最近生成的数据集。
2.OUT=数据集名指定一个输出数据集,若省略,排序结果仍存在原数据集中。
3.NODUPKEY检查并删除具有相等排序变量值的较后观察值。
4.BY语句:
BY语句指定排序变量名,每一个变量前有一个选择项DESCENDING,指定该变量的观察值按降序排列,缺省则以升序排列。
例如:
DATAnewa;
INPUTname$sex$score;
CARDS;
ZhangsanM98
lisiF95
wanwuM90
liuliuF89
PROCSORTOUT=newb;
BYDESCENDINGSCORE;
PROCPRINTDATA=newb;
RUN;
输出结果为:
OBSNAMESEXSCORE
1zhangsanM98
2lisiF95
3wanwuM90
4liuliuF89
例如(多序):
datanew;
inputxm$agesalary;
cards;
aaa30700
bbb25300
ccc28500
ddd30600
eee25450
procsort;
byagesalary;
procprint;
run;
datanew;
inputxm$agesalary;
cards;
aaa30700
bbb25300
ccc28500
ddd30600
eee25450
procsortdata=newout=new1;
byagesalary;
procprintdata=new1;
run;
§5.3STANDARD
某些统计技术要求把数据集标准化后再分析,STANDARD过程按给定的平均值和标准差可对SAS数据集中的某个或全部变量进行标准化,并产生一个新的数据集。
一、过程格式
PROCSTANDARD选择项;
VAR变量表;
FREQ变量表;
WEIGHT变量表;
BY变量表;
二、语句说明
1.PROCSTANDARD语句选择项
DATA=数据集指定要被标准化的数据集。
若缺省,则使用最新建立的数据集。
OUT=数据集给含标准化变量的新数据集命名。
若缺省,则SAS按DATAn惯例给输出数据集命名。
MEAN=m要求变量被标准化后均值为m。
若缺省,则输出均值与输入均值相同。
STD=s要求变量被标准化后标准差为s。
若缺省,则输出标准差与输入标准差相同。
VARDEF=DF|N|WEIGHT或WGT|WDF用于指定变异数计算过程中分母的值。
若选用DF,则分母是自由度N-1;若选用N,则分母是样本数N;若选用WGT,则分母是各观察值权重和;若选用WDF,则分母是上述WGT的值减1。
默认值为DF。
REPLACE要求用均值代替缺失项值。
2.PROCSTANDARD过程其他常用语句
(1)VAR语句
指定用于被标准化的变量。
(2)FREQ语句
指定一个变量为频数变量,这个变量的值是各观察值重复出现的次数。
若此变量不是一个整数,SAS会截去小数部分,只取其整数部分。
(3)WEIGHT语句
指定一个变量为权变量,这个变量是各观察值的加权值,不一定是整数,它是用来计算经过加权后的平均数和变异数的。
(4)BY语句
指定对原始数据集进行分组的变量,将原数据集分成几个小的数据集,然后在每个小数据集内进行标准化变量的转换。
当选用此选项时,原数据集的数据必须按BY变量串的值由小到大重新排列过(可用PROCSORT来完成)。
例如:
学生两门课考试成绩为score1和score2,要求把学生考试成绩标准化,标准化后的学生成绩的平均值为80,标准差为5。
DATAold;
INPUTname$score1score2;
CARDS;
zhangsan8099
lisi8998
Wangwu8779
Liuliu6775
qudab6471
PROCSTANDARDMEAN=80STD=5OUT=new;
VARscore1score2;
PROCPRINT;
RUN;
输出结果:
OBSNAMESCORE1SCORE2
1zhangsan81.138985.5373
2lisi85.081185.1580
3Wangwu84.205077.9520
4Liuliu75.444676.4349
5qudab74.130574.9178
§5.4TRANSPOSE过程
TRANSPOSE过程可把原数据矩阵进行转置,使新数据集的变量对应原数据集的观察值,而新数据集的观察值对应原数据集的变量。
一、过程格式:
PROCTRANSPOSE选择项;
VAR变量表;
ID变量;
IDLABEL变量;
COPY变量表;
BY变量表;
二、语句说明:
1.PROCTRANSPOSE语句选择项
DATA=数据集指定一个要被转置的数据集,若缺省则转置最新建立的数据集。
PERFIX=变量名指定一个前缀,构成新的变量名。
如PERFIX=x,则转置后的新变量名为x1,x2,x3,…,xn。
OUT=数据集指定转置所要建立的新的数据集。
若缺省,则按DATAn的习惯自动建立。
2.PROCTRANSPOSE过程常用语句
①VAR语句:
列出要被转置的变量,若缺省,则原数据集中未在其他语句中列出的所有数值变量均被转置,字符型变量必须在VAR语句中列出才能被转置,未被转置的变量不进入新数据集,除非它们已在COPY或BY语句中已列出。
②ID语句:
指定转置后新数据集中的变量名。
若缺省,系统将以COL1、COL2等作为新数据集的变量名。
③COPY语句:
将原数据集中的变量直接拷贝到输出数据集中。
④BY语句:
对原数据集进行分组转置,分组变量被包括在输出数据集中,但它不被转置。
用BY语句对数据集进行转置时,要求输入的数据集已被排序。
例如:
DATAnew;
INPUTname$score1score2@@;
CARDS;
zhangsan8099lisi8998
Wangwu8779Liuliu6775
PROCPRINT;
PROCTRANSPOSE;
IDname;
PROCPRINT;
RUN;
输出结果:
OBSNAMESCORE1SCORE2
1zhangsan8099
2lisi8998
3Wangwu8779
4Liuliu6775
OBS_NAME_ZHANGSANLISIWANGWULIULIU
1SCORE180898767
2SCORE299987975
§5.5PLOT过程/gplot
PLOT过程是一个绘制散点图的过程,可以描述数据集中两个变量的相互关系。
一、散点图:
在平面直角坐标系中,由一系列点来表示两个变量之间的关系图,利用散点图可以看出两个变量之间的相关关系,一个变量随另一个变量变化的趋势,及二元变量的分布情况,经常作为统计分析的辅助手段。
二、过程格式:
PROCPLOT选择项1;
PLOT绘图表达式/选择项2;
BY变量表;
三、语句说明:
在一个PLOT过程中,至少有一个PLOT语句,在每一个PLOT语句中可以有多个绘图表达式;
1.PROCPLOT语句常用选择项
DATA=数据集指示要使用的数据集;缺省时,使用最新建立的数据集。
UNIFORM与BY语句有关,要求BY组的坐标刻度一致。
2.PLOT语句
绘图表达式有3种格式:
1垂直坐标变量*水平坐标变量即:
y*xy为纵轴,x为横轴。
垂直坐标变量*水平坐标变量即:
x*yx为纵轴,y为横轴。
2垂直坐标变量*水平坐标变量="标记字符"
即:
x*y=”#”以“#”为作图符号,x为纵轴,y为横轴。
即:
x*y=”#”z*x=”A”以“#”和“A”给出两个图形的说明,即在同一个坐标系中,画出两个散点图。
如果“=”后面是变量,则以变量值作为图形符号。
若省略“=变量或字符”,则作图符号用26个英文字母,A-表示出现的1次的点,B表示出现的2次的点,一次类推。
3垂直坐标变量*水平坐标变量=标记变量名
一般情况下,PLOT过程用字符“A”表述坐标点,但采用第二种格式将用规定的字符描述,用第三种格式将用变量的数值作标记。
PLOT语句的选项
VAXIS=值表指出垂直轴上的刻度标记。
如:
PLOTy*x/VAXIS=0TO50BY10;也可用不均匀刻度表示,如:
PLOTy*x/VAXIS=010100100010000;
HAXIS=值表指出水平轴上的刻度标记。
VREF=值表请求画平行于水平轴的直线,其与垂直轴的交点由值指出。
HREF=值表请求画平行于垂直轴的直线,其与水平轴的交点由值指出。
VREFCHAR="标记字符"指定标记垂直轴线的字符。
HREFCHAR="标记字符"指定标记水平轴线的字符。
VPOS=值定义图的垂直高度,应小于页码8行。
HPOS=值定义图的水平宽度,应小于页码3列。
OVERLAY将多个散点图绘制于一个坐标系下。
CONTOUR=n为整数,可以绘制二员函数的平面等高图。
例如用PLOT过程绘制y=sinx在0至π内的图形,可用下列程序:
OPTIONSLS=70PS=44;
DATA;
DOx=0to4*ATAN
(1)BY0.05;
y=SIN(x);
OUTPUT;
END;
PROCPLOT;
PLOTy*x="*"/VAXIS=0TO1BY0.25HAXIS=0TO4BY1;
RUN;
例如:
OPTIONSLS=70PS=44;
DATA;
DOx=0to50BY2;
y=x;
OUTPUT;
END;
PROCPLOT;
PLOTy*x="*"/VAXIS=0TO50BY2HAXIS=0TO50BY2;
RUN;
例如:
PTIONSLS=70PS=44;
DATAnew;
INPUTNO$XYZ;
CARS;
a-4160
b-397
c-2412
d-1115
e0016
f1115
g2412
h397
i4160
PROCprint;
PROCPLOT;
PLOTy*x="*"Z*X="#"/OVERPLAY;
RUN;
应用实例
10名20岁男青年身高(cm)与前臂长(cm)如下,请绘出散点图。
身高170173160155173168178183180165
前臂长45424441475047464943
程序如下:
datanew;
inputxy@@;
cards;
1704517342160441554117341
1885017847183461804916543
procplotdata=new;
ploty*x="*";
run;
§5.6变量值的线性组合过程SCORE
SCORE过程是将两个数据集相乘产生第三个数据集,其中一个数据集是原始数据集,另一个是系数数据集,产生的第三个数据集存放前两个数据集线性组合的结果。
一、过程简介
PROCSCOREDATA=数据集选择项;
VAR变量表;
ID变量表;
BY变量表;
二、语句说明
1.PROCSCORE语句选择项
DATA=数据集指定所用的原始数据集,此项不可省略。
SCORE=数据集指定所用的系数数据集。
数据集中必须包含_TYPE_和_NAME_(或_MODEL_)两个变量。
如果省略此项,系统会自动寻找SAS最后形成的数据集。
OUT=数据集指定输出数据集名称,它包含有原始变量值、线性组合后的新变量值,新变量用_NAME_或_MODEL_命名。
如果省略输出数据集,系统自动产生一个默认的输出数据集。
TYPE=类型名指定系数变量的类型名称。
如果指定具体的系数变量,SCORE过程将用系数数据集中该变量对应的数值和原始数据集中的数据相乘。
否则SCORE过程从系数数据集找出默认的“SCORE”或“USCORE”类型的变量。
如果OUTSTAT指定的数据集是由CANCORR,CANDISC,PRINCOMP或VARCLUS过程产生,则不需要指定具体的系数变量名称。
如果是一元回归,则TYPE=PARMS。
PREDICT如果选用此参数,SCORE过程可将系数数据集中值为–1变为0。
在回归分析时依变量的系数都是-1。
如果直接使用该系数集SCORE过程将产生负残差,若选用PREDICT将产生依变量的预测值。
RESIDUAL选用残差将会改变每个系数的符号。
如在回归分析中选用RESIDUAL参数,SCORE过程将负残差变为正残差。
NOSTD抑制原始数据被标准化。
一般来说,SCORE过程会在系数数据集中查找_TYPE_="MEAN"和_TYPE_="STD"或_TYPE_="USCORE"和_TYPE_="USTD"的观察值,并用这些参数对原始数据进行标准化。
2.PROCSCORE过程其他常用语句
VAR语句指定计算分值所需的变量列表,这些变量必须同时包含在原始数据集和系数数据集中,而且必须是数值型变量。
如果不设定该项,SCORE过程将使用系数数据集中所有的数值型变量。
ID语句从原始数据集中挑选某些变量,使他们包括在输出数据集中,并作为标识变量。
如果没有ID选项,原始数据集中的所有变量都将被输出到输出数据集中。
BY语句指定对观察值进行分组的分组变量,据之分别进行分析。
选用此命令时,数据集中的数据必须先按照BY变量串的值做由小到大的重新排列。
SCORE语句经常在回归分析、主成分分析、因子分析、典型相关分析、典型判别分析、变量聚类分析等多变量分析中,用于计算预测值和因子得分等。
§5.7FORMAT过程
利用FORMAT过程可以对字符或数值变量定义一个所需的格式。
一、过程格式
PROCFORMAT选择项;
VALUE格式名范围=被输出的值…;
INVALUE格式名范围=被输出的值…;
二、语句说明
在一个FORMAT过程中,可以使用多个VALUE和INVALUE语句定义多个格式。
PROCFORMAT语句常用选项:
CNTLIN=数据集指定输入数据集,包含输入格式的控制信息。
CNTLOUT=数据集指定输出数据集,包含输出格式的控制信息。
LIBRARY=逻辑库名设定存储输入输出格式的永久目录的库关联。
该选项用于创建永久性的输入输出格式。
使用前应先用LIBNAME把逻辑库名同有关的目录关联起来。
1.VALUE语句
该语句定义一种输出格式,可把某变量的值按所定义的格式输出。
可把数值变成字符或转成另一种字符。
格式名称可以自由选择,但要注意,格式名不能超过8个字符,格式名尾部不能有数字;字符型变量的格式名称必须以$开始。
范围说明有4种方法:
①单个数值或字符串,如:
“VALUE$namefmt"zhangs"="ZhangSan";”。
②数值或字符串列表,如:
“VALUEagefmt2,14,26,38="虎年生";”。
③数值或字符范围,如:
“VALUEscorefmt60-70="及格";”
④范围列表,如:
“VALUEscorefmt0-40,90-99="非正常数据";”
在范围说明中可以包括关键字LOW、HIGH和OTHER。
LOW和HIGH分别表示变量的最小和最大值;OTHER表示其他范围中不包括的一个特殊范围。
LOW并不包括缺失项。
如:
PROCFORMAT;
VALUEagegrpLOW-18="0-18"
41-60="41-60"
60-HIGH="大于60"
.="缺失"
OTHER="超出范围";
被输出的值的最大长度为40个字符,但一般限制在16个字符之内。
VALUE的应用举例:
DATAnew;
INPUTname$sex$age$score;
CARDS;
zhangsanMALETiger1
lisiFEMALECow4
PROCFORMAT;
VALUE$sexfmtFEMALE=F/*该处$不可缺省*/
MALE=M;
VALUE$agefmtTiger=虎年生/*该处$不可缺省*/
Cow=牛年生;/*如果此处规定COW=2,2将按文本输出*/
VALUEscfmtLOW-2=不及格
3-HIGH=及格;
PROCPRINT;
FORMATsex$sexfmt./*该处$和.不可缺省*/
age$agefmt./*该处$和.不可缺省*/
scorescfmt.;/*该处.不可缺省*/
RUN;
输出结果:
OBSNAMESEXAGESCORE
1zhangsanM虎年生不及格
2lisiF牛年生及格
2.INVALUE语句
该语句定义一种输入格式,可把原始数据中某变量的值转变为另一个不同的值。
输入格式名、范围、被输出的值的用法与VALUE语句中的相应部分用法基本相同。
如:
PROCFORMAT;
INVALUE$sexfmtFEMALE=F/*该处$不可缺省*/
MALE=M;
INVALUEagefmtTiger=12/*如果agefmt前加$,则12将是字符型的*/
Cow=13;
INVALUE$scfmtLOW-2=不及格/*该处$不可缺省*/
3-HIGH=及格;
DATAnew;
INFORMATsex$sexfmt./*该处$和.不可缺省*/
ageagefmt./*该处.不可缺省*/
score$scfmt.;/*该处$和.不可缺省*/
INPUTname$sexagescore;
CARDS;
zhangsanMALETiger1
lisiFEMALECow4
PROCPRINT;
RUN;
输出结果:
OBSSEXAGESCORENAME
1M12不及格zhangsan
2F13及格lisi