SAS课件讲义.docx
《SAS课件讲义.docx》由会员分享,可在线阅读,更多相关《SAS课件讲义.docx(46页珍藏版)》请在冰点文库上搜索。
![SAS课件讲义.docx](https://file1.bingdoc.com/fileroot1/2023-5/4/819deef1-f264-4b04-969e-d5ff498adb55/819deef1-f264-4b04-969e-d5ff498adb551.gif)
SAS课件讲义
★第一章:
SAS系统简介
SAS文件及命名
1、SAS数据集文件(后缀为sas7bdat)
2、SAS程序文件(后缀为sas)
3、SAS日志文件(后缀为log)
4、SAS输出文件(后缀为list)
★第二章:
SAS数据集的分类
临时数据集和永久数据集
(一)临时数据集存放在work数据库中
(二)永久数据集存放在永久数据库中,除了work数据库之外,其他的数据库都是永久数据库。
1、SAS文件的2级命名方式:
目录.文件名
2、使用Libname语句创建永久数据集,
libname自建目录名‘目录地址’;
Libname例
创建与读取永久数据库
1、创建永久数据集永久数据集的扩展名是sas7bdat。
libname例:
libnamesasroom"d:
\sasdata";
datasasroom.data1;
inputy$x1x2x3@@;
cards;
run;
procprint;
run;
2、读取永久数据集read例
libnamesasroom"d:
\sasdata";
datasasroom.data1;
inputy$x1x2x3@@;
cards;
run;
建立SAS数据集的5种方法
1、用data步输入数据建立。
newdata例
datanewdata;
inputgroup$x1x2x3;
cards;
2、利用infile语句从外部调入数据文件建立SAS数据集,注意:
infile语句必须放在input语句的前面。
(Infile例)
(Infile例)
datanewdata2;
infile"d:
\sasdata1.txt";
inputgroup$x1x2x3;
run;
procprintdata=newdata2;
title"数据";
run;
(Set1例)
datanewdata;
setsasuser.air;
run;
procprintdata=newdata;
run;
3、利用“导入数据”功能建立。
(Excel例)
4、利用EFI(externalfileinterface)功能导入(classifydata例)。
5、data步利用set语句建立。
(Set1例)
查看SAS数据集的内容
1、使用contents过程查看数据的相关信息。
Contents例
proccontentsdata=数据集名position;
2、用print过程来显示数据。
Contents例
proccontentsdata=sasuser.airposition;
run;
SAS数据集的加工
一、两个SAS数据集的合并
1、两个SAS数据集的串接(set语句);set2例
2、两个SAS数据集的并接(merge语句).
二、变量值的排序(sort语句)sort例
三、对变量的选择(drop语句和keep语句)。
Drop1,2例、keep例
set2例
procprintdata=sjk.newdata;
run;
sort例
procsortdata=sjk.dqgzout=sjk.outdata;
bysum;
procprintdata=sjk.outdata;
run;
Drop1,2例
1.datadqgz_drop;
setsjk.dqgz;
dropx1x2;
run;
procprintdata=dqgz_drop;
run;
2.procprintdata=sjk.dqgz(drop=x1x2);
run;
keep例
datadqgz_keep;
setsjk.dqgz;
keepdx3x4x5;
run;
procprint;
run;
四、对观测的选择。
例子:
obs1、obs2、obs_if、obs_if_then、obs_where。
五、产生新变量及其观测值,利用赋值语句:
variable=表达式;例子:
new_variable
obs1
dataclass_obs;
setsasuser.class(firstobs=3obs=10);
run;
procprint;
run;
obs2
dataa2;
setsasuser.fitness(keep=ageweightruntimefirstobs=2obs=15);
procprintdata=a2;
run;
obs_if
dataa3;
setsasuser.fitness;
ifgroup='1';
procprintdata=a3;
run;
obs_if_then
dataa4;
setsasuser.fitness;
ifgroup='1'thendelete;
procprintdata=a4;
run;
obs_where
dataa5;
setsasuser.fitness;
where=(group='2');
procprintdata=a5;
run;
new_variable
dataa6;
setsasuser.fitness;
x=log(weight);
y=runtime*10;
procprintdata=a6;run;
SAS运算符
数学运算符:
+ - */**(幂运算)
比较运算符:
=(EQ)^=(NE)>(GT)<(LT)>=(GE)<=(LE)in
逻辑运算符:
&(AND)|(OR) ^(Not)
其它:
><(最小值)<>(最大值)||(连接)
运算次序一
第一级:
**(+ -)前缀 ^ ><<>第二级:
*/
第三级:
+ -第四级:
||第五级:
其余比较算符
第六级:
&第七级:
|
注意:
括弧可改变运算顺序,括弧里的先计算
运算次序二
对于相同优先级的算符,左边的运算先做。
但有两个例外:
1.对最高优先级,右边的运算先做
2.当两个比较算符围着一个量时,这个表达式看成是有一个and出现一样被计算。
如:
12<age<20,等价于:
12<age&age<20
SAS函数
SAS函数返回由它的参数计算得到的结果,它的一般形式为:
SAS函数名(参数1,参数2,…)
参数之间由逗号隔开。
SAS函数的参数可以是参数、变量、表达式或者其它函数。
SAS函数分为13种类型,共147个函数。
下面我们介绍一些常用的SAS函数。
1.数学函数:
abs(x)x的绝对值;sign(x)符号函数
max(x,y,...)x,y,…中的最大值min(x,y,...)x,y,…中的最小值
mod(x,y)x/y的余项;sqrt(x)x的平方根
exp(x)e的x次幂;log(x)自然对数
log10(x)以10为底的对数log2(x)以2为底的对数
sin(x)cos(x)tan(x)三角函数arsin(x)artan(x)反三角函数
2.样本统计函数
sum(x,y,...)计算参数和mean(x,y,...)计算算术平均值
var(x,y,...)计算方差std(x,y,...)计算标准差
3.概率分布函数
Probbnlm(p,n,r)参数为p,n的二项分布函数,P{X<=r}的值
Probnorm(x)标准正态分布函数,P{X<=x}
Probchi(x,df)自由度为df的卡方分布函数,P{X<=x}的值
Probf(x,df1,df2)F分布probt(x,df)t分布
4.随机数函数
Uniform(seed)产生[0,1]区间上均匀分布的随机数
Rannor(seed)产生N(0,1)的随机数
Ranbin(seed,n,p)产生二项分布的随机数
libnamesas'd:
\sas';
dataa3;
setsas.dqnlmy3(keep=dcx1);
ifc='1'theny=2*x1;
elsey=3*x1;
procprintdata=a3;
run;
5.时间函数
DATA步中常用语句
*IF语句(条件转移语句)
1、简单if语句一般格式:
if条件表达式;
2、if…then语句if条件表达式then执行语句;
3、if…then…else语句
if条件表达式then执行语句1;
else执行语句2;(if_then_else例)
*DO语句
1、简单do语句(常与IF…THEN一起使用)
do;
SAS语句;…
end;(do1、if_then_do例)
2、循环DO语句(do2例)
do指标变量=初值to终值(by增量);
SAS语句;
end;
do1
datads;
inputx;
fileprint;
ifx>5thendo;
y=x*10;
putx=y=;
end;
cards;
if_then_do例
dataa5;
setsas.dqnlmy2(keep=dcx1x2);
ifx1<1000andc='2'thendo;
y=2*x1;
z=3*x2;
end;
procprintdata=a5;
run;
do2例
dataxa;
inputx@@;
doi=1to4;/*把i改成其他字符同样可行*/
y=4*x;
output;/*如果略去output,则只输出最后一次循环的结果*/
end;
cards;
循环do语句可采用条件控制形式。
一般形式:
dountil表达式;
SAS语句;
end;
(表示循环语句执行到括号中的表达式满足为止,do_until例)
或者:
dowhile表达式;
SAS语句;end;
(表示循环语句执行到括号内的表达式不满足为止,do_while例)
循环语句还可以采用嵌套形式,即在循环语句do…end内部,可嵌入另一个do…end循环语句,称为嵌套循环。
(do_do例)
do_until例
datarandom;
i=0;
dountil(i=30);
x=2+4*rannor(1234);
i=i+1;
output;end;
do_while例
datawhile;
n=0;
dowhile(n<4);
fileprint;
putn=;
n+1;end;run;
do_do例
datakscj2;
doa=1to2;
dob=1to3;
doi=1to4;
inputx@@;
output;end;end;end;cards;
*GOTO语句
GOTO语句告诉SAS系统立即转向执行GOTO语句中指出的语句,并从那一点开始继续执行.(go_to例,do3例)
*LABEL语句
LABEL语句的作用是对变量进行说明。
格式:
label变量名1=‘标记1’变量名2=‘标记2’…
(label例)
go_to例
datainfo;
inputxy;
if1<=x<=5thengotook;
x=3;
count+1;*累加语句
ok:
sumx+x;/*累加语句*/
cards;
do3例
datainfo;
inputxy;
ifx<1orx>5thendo;
x=3;
count+1;*累加语句
end;
sumx+x;
cards;
label例
datastudent;
inputname$sex$chinengmathiq;
labelchin='中文'
eng='英语'
math='数学';
cards;
*LENGTH语句
变量长度的缺省值是8,但有时长度超过了8个字符,这时可用length语句定义变量的长度。
(length例)
*Delete语句
告诉SAS系统停止处理当前观测值,且不写入正在创建的数据集中。
Delete语句通常用作IF语句中的THEN字句或作为有条件的执行DO语句的一部分。
(delete1例)
length例
dataaa;
lengthname$14;
inputname$sex$hw;
cards;
zangzhihuif1.7052
zhaochangweim1.7355
;
procprint;
run;
delete1例
datastu;
inputidenglishtest1test2;
ifenglish<60thendelete;
total=sum(oftest1test2english);
cards;
★第三章:
制作列表报告
在PROCPRINT中使用其他语句可以产生一些比较复杂的报表,例如产生:
1、标题和脚注(TitlesandFootnotes)
例lonpar
libnamesas'D:
\SASDATA';
datasas.lonpar;
infile'd:
\data\lonpar.txt';
inputflight$1-3datedest$11-13mail14-17
freight18-21boarded22-25revenue26-32;
procprintdata=sas.lonpar;
run;
2、用户定制的表头(ColumnHeading)
3、格式化的数据值
4、总和(ColumnTotals)
5、小计(Columnsubtotals)
6、按组分页
§3-1产生列表报告
一、产生简单的列表
1、产生一个最简单的列表的程序形式:
Procprintdata=数据集名;
Run;
在缺省情况下,列表报告的最左面出现OBS列,给出了观测号;报告按原数据集的顺序显示。
(例lonpar)
二、Noobs选项
在print过程中,可以用noobs选项去掉obs列。
(例noobs)
三、VAR语句
使用var语句可以控制print过程中变量的出现与否以及出现的顺序,它的一般形式是:
VAR变量1变量2…;(例var)
Noobs
procprintdata=lonparnoobs;
run;
VAR
procprintdata=lonparnoobs;
vardateflightdestboardedrevenue;
run;
四、where语句:
选择数据集的观测
where条件表达式;
例1:
between…and:
选择变量值在某一范围的观测:
(例where)
where变量名between…and…;
where变量名notbetween…and…;
例2:
contains,选择变量中包含某一特殊字符串的观测:
where变量名contains‘字符串’;
五、Sum语句:
计算变量的总和(显示在该变量所在列的下方)。
一般格式:
(例sum)
sum变量名;
六、ID语句。
使用了id语句后,
(1)最左面的obs列被取消;
(2)Id/by语句所指定的变量被排列在报告的最左边;
(3)Id/by语句所指定的变量只在每个组的开始处出现一次。
(id_by)
七、Pageby语句:
使产生的报告按组分页。
pageby变量名;(例pageby)
Where
procprintdata=lonparnoobs;
vardateflightdestboardedrevenue;
whererevenuebetween155000and190000;
run;
Sum
procprintdata=lonparnoobs;
vardateflightdestboardedrevenue;
sumboardedrevenue;
run;
Pageby
procprintdata=sorted;
idflight;
vardatedestboardedrevenue;
sumboardedrevenue;
byflight;
pagebyflight;
run;
id_by
procsortdata=lonparout=sorted;
byflight;
procprintdata=sorted;
idflight;
vardatedestboardedrevenue;
sumboardedrevenue;
byflight;
run;
§3-2改进列表报告
一、标题(title)和脚注(footnote)
在SAS的所有报告中,都可以加入标题和脚注:
titlen‘标题文本’;
footnoten‘脚注文本’;(例title_footnote)
Title语句和Footnote语句具有如下特点:
1、n的范围从1到10,即最多有10个标题和脚注。
2、标题出现在每页的顶部,脚注出现在底部。
3、缺省的标题是‘TheSASSystem’,缺省的脚注不出现.
4、没有n的title和footnote等于title1和footnote1;
在使用了title和footnote语句后,所定义的标题和脚注将一直保持有效,直到另一个title和footnote语句被执行.
使用以下两个简单语句,可以取消所有的标题和脚注:
title1;footnote1;(例title1)
二、Label语句:
制作自定义的表头(给变量产生一个标签).
变量的标签具有以下属性:
1、最大长度为40的字符串
2、在print过程中必须使用label或split选项才能被显示
3、如果在过程步中被定义就只在该过程中有效;而如果在数据步中被定义,就随数据集一直有效(例label_2)
三、Split语句:
控制表头的分割
split=‘符号’;(例split)
title_footnote
procsortdata=lonparout=sorted1;
byflight;*按flight进行排序,输出为数据集sorted1;
procprintdata=sorted1;
idflight;
sumboardedrevenue;*对boarded,revenue求和;
byflight;
tile'国际航班';*一级标题;
title2'FlightstoLondonandParit';*二级标题;
footnote'preparedmarch12,1990';*一级脚注;
footnote2'bytheCorporateInformationCenter';*二级脚注;
run;
title1
procprintdata=sorted1;
idflight;
sumboardedrevenue;*对boarded,revenue求和;
byflight;
title1'StatisticsforFlightstoLondonandParit';
footnote1;
run;
label_2
procprintdata=sorted1label;*注意此处的label不能省略;
idflight;
vardatedestboardedrevenue;
sumboardedrevenue;*对boarded,revenue求和;
byflight;
title1'FlightstoLondonandParit';
footnote1;
labelflight='flightnumber'
date='DateofFlight'
dest='FlightofDestination'
boarded='NumberofPassengers'
revenue='totalRevenue';run;
Split
procprintdata=sorted1split='*';*注意此处的split;
idflight;
vardatedestboardedrevenue;
sumboardedrevenue;
byflight;
title1'FlightstoLondonandParit';*标题;
footnote1;
labelflight='flight*number'
date='Date*of*Flight'
dest='Flight*of*Destination'
boarded='Number*of*Passengers'
revenue='total*Revenue';run;
★第四章:
数据的描述性统计
§4-1常用统计量的含义
N—非缺失值观测的数目Nmiss—缺失值观测的数目
Min—最小值Max—最大值Range—极差(max-min)
Sum—观测值的加权和Mean—均值
Variance—方差StdDev—标准差SStdMean—标准误
CV—变异系数Mode—众数
USS—平方和CSS—校正平方和
Skewness—偏度系数Kurtosis—峰度系数
T—检验mean=0的T值Median—中位数
Q3—上四分位数Q1—下四分位数
§4-2变量的概括描述
一、PROCMEANS过程(means例、means_1例)
procmeansdata=数据集选项;
var变量名;
run;
其中的选项包括:
nmeanstdvarminmaxsumu