【文档说明】第二章SAS编程基础课件.ppt,共(68)页,297.023 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-45488.html
以下为本文档部分文字说明:
第二章SAS编程基础内容SAS程序结构变量、常数、表达式和函数数据的输入数据的输出输入和输出的格数据及的操作变量的控制观测数据的管理条件语句与循环语句过程步的介绍一、SAS程序的结构SAS的程序由若干个SAS语句(State
ments)构成。按结构和功能可以将SAS过程分为两个过程步。是数据步(DataSteps)用于数据集的产生、加工和整理。程序步(ProcSteps)用于数据的分析并在Output窗口输出结果。一个SAS程序可以
有一个数据步或一个程序步。也可以有一个数据步和多个程序步。也可以有多个数据步和程序步。1.SAS的语句基本规则SAS的语句一般由SAS的关键词开始,以英语的分号(;)结尾,语句中还包括SAS的变量、常数、运算符函数或一些特殊的字符(比如”$”)。基本规则:语句可以在一行的任何地方开
始;一个语句可以分写为若干行;多个语句可以写在同一行;语句中各项之间以空格隔开;不区分大小写。在SAS语句中的注释语句为:/*注释内容*/或*注释内容。数据步以DATA语句开头,其后可以包括多个SAS语句。DATA语句是用来建立SAS的数据
集。该语句后的其它语句均是用来输入数据和对数据进行修改和编辑等。数据步的一般形式为:data数据集名;数据步语句;…;run;Run代表SAS的程序结束。一个程序可以有几个“run”,也可以只用一个“run“。DATAD1;INPUTAB;C
ARDS;3579;RUN;建立了一个叫D1的数据集,有变量A和B,分别有两个个案。DATAD2;INPUTCD;CARDS;131517192123;RUN;【例】建立以下样本的SAS数据集姓名:name性别:xb年龄:age身高:high体重:weigt【例】频数数据的组织
方式:居民储蓄问卷调查结果年龄收入人数24900635180010372000930170011将此分组数据构造SAS的数据文件。dataa;inputxyf;cards;24900635180010
372000930170011;procmeans;freqf;run;2.过程步过程步要求SAS从系统中调出一个SAS过程,这个过程对应某一种统计分析方法,并对指定的数据集执行该过程,过程步以proc开头,指出调用的过程名和要分析的数据集。其
后利用一些语句来指定调用该程序的各个参数。Data=数据集名是可以选择的,如果缺省使用最近的数据集。Proc过程名data=数据集名;过程步语句;过程步语句;…;Run;【例】procprintdata=a;run;简单打印的过程语句。procmeansdata=a;
run;计算描述统计量的过程。二、变量、常数、表达式和函数1.变量SAS的变量是用来表示统计数据的。在SAS中,每一列就是一个变量,列中的数据值就是变量值。SAS变量的属性(Attributes),包括名称(name)、类型(type)、长度(length)、输入格式(i
nformat)、输出格式(format)以及标签(label)。变量属数字范围缺省值控制语句名称命名规则无rename类型数值型和字符型数值型无长度数值型2-8个字节,字符型1-256个字节8个字节Length语句标签1-256个字节无Label语句SAS变
量属性2.常数SAS常数用来表示固定的值,包括数字、字符数和一些特特殊的符号。数值型常数:例如1,2,0.53,1.5E-5字符串常数:例如SWUFE日期时间型常数:在SAS中日期和时间均有特殊的储存方式。date=‟10APR2012‟d;dataa
;date='10APR2012'd;inputxdate12.;cards;10/APR/2012;procprint;FORMATxWORDDATE.;FORMATdateWORDDATE.;run;SAS的日期是从1960年1月1日起的整天数。计算2013年国庆
的日期值。您的生日的日期值。dataa;inputx;cards;10903;procprint;FORMATxdate8.;run;3.表达式表达式由运算符号和运算对象组成。执行后产生一个目标值。运算
符号包括算术运算符号、比较运算符号、逻辑运算符号、函数和括号等。【例】假设我们有工人的年龄(age)和工龄(gl)两个变量,现在要计算工人的入厂年龄(rc)。Dataa;Inputagegl;rc=age-gl;Cards;56323612;Procprint;Run;data
a;Inputagegl;rc=age-gl;old=sign(age>55);cards;563236125726326;procprint;run;运算的符号与含义**乘方||连接+正=等于-负^=不等于^非>大于<>最大<小于><最小>=大于等于*乘<=小于等于/除&
与+加|或-减4.SAS的函数SAS的功能非常强大和全面,这一点在函数上得到了极为充分的体现,SAS中共有25大类函数,功能涉及到文件管理、金融、数学计算、统计计算、字符串处理、货币转换等各个方面。因篇幅限制,这里无法将数百种函数一一解释,只列举出较为常用的函数。ABS(X)求x的绝对值MAX(
X,Y,Z)求一串数中最大的一个,例如MAX(1,2,3,4)=4。MIN(X,Y,Z)求一串数中最小的一个,例如MIN(1,2,3,4)=1。MOD(X,Y)求X除以Y的余数,例如MOD(9,5)=4SIGN(X)计算X的符号,结果为1,、-1或0。SIGN(X)称为符号函数,如果
括号里面的x是正的,则得1,括号里面x是负的则得-1,括号里面的x是零,则得0。SQRT(X)求X的平方根。第一类算术函数DIM<n>(X)求数组中的元素个数,X为数组名,n为该数组的维数DIM(X,n)求多维数组的某一维中的元素个数,X为数组名,n为指定的维数HBOUND<n>(X)
求数组的上界HBOUND(X,n)求多维数组中的某一维的上界,X为数组名,n为指定的维数LBOUND<n>(X)求数组的下界LBOUND(X,n)求多维数组中的某一维的下界,X为数组名,n为指定的维数SAS函数是SA
S系统提供的子程序。格式为:函数名(自变量1,自变量2,…)函数名(of变量列)dataa;inputxy;sum=sum(x,y);cards;123456;run;三、数据输入1.数据源和数据步形式在数据量不大时,一般可以在程序编辑器窗口将数据行和SAS程序写到一起,完成
数据的输入。一般形式为:data数据集名;input变量名列;cards;数据行;run;其中,input语句用来读入数据,它根据数据行形式的不同采用不同的语句格式,cards语句可以用datalines语句,该语句的含义是提示SAS系统下面紧跟的是
数据行。Input语句有三种输入数据格式:列表输入列输入格式化输入2.按列输入对于严格排列好的标准数据,才采用按列输入。input变量名<$>起始列数<-结束列数>;Inputname$1-10num1
1-18;cards;zhangsan20051001Lisi20052002;Run;3.列表输入在Input语句中仅列出变量名;数据仅需用空格分割,不必列对齐。基本格式Input变量名<$><输入格式><@|@@>;【例】Inputname$se
x$agehw;其中@表示一个数据行只能读入一个观测,@@表示一个数据行可以读入多个数据,按顺序读完。4.格式化输入格式化输入:在Input语句中,变量名后给出一个输入格式,输入格式用来说明变量的数据类型和字段的宽度;在数据中,数据一般要求列对齐,不必用空格隔开。例:字符格式:Inp
utname$10.;数值格式:Inputh4.2;日期格式:mmddyy10.date12.例:Dataa;Inputdmmddyy10.d2date12.;cards;10/19/0519/Oct/2005
;Inputh4.2;的含义是输入的数据是占4个有效数字,小数点两位。Inputdmmddyy10.d2date12.;输入的数据是两种日期数据格式。即从1960年1月1日开始计算的整天数。dataa;
Inputdmmddyy10.d2date12.;cards;11/01/201311/jul/2013;run;procprint;run;MMDDYY8.(01232013)格式读入日期值时,日期值最长占8列。如格式给出的长度不足,则会出现数据截尾。DATE10.格式是按ddmmm
yy的格式读入数据的,最长可读入10列。简化输入:如有X1,X2......X10十个字符型量的值紧挨在一起,每个量长度为3,则:INPUT(X1-X10)($3.);四、数据输出1.输出数据到SAS窗口直接使用PUT语句,可以将
数据输出到SAS系统的log窗口;SAS系统的OUTPUT窗口;在put语句前利用file语句,标识名的选择为:log和print。若标识为log,表示输出在日志窗口,如果标识为print,则输出现实在输出窗口,此时put语句将结果打印到输出窗口。data
a;inputxyz;fileprint;putxyz;cards;125347458;run;dataa;inputxyz;filelog;putxyz;cards;125347458;run;2.输出到外部文件联合使用PUT和FILE语句,可以
实现将数据输出到外部文件。其中,FILE语句用于定义要输出外部文件。其语句格式为:FILE„文件路径’<选项>;文件路径包括完整的路径和文件名。选项用来控制输出数据如何被写入到输出文件中。put语句用来实现数据输出。dataa;inputxyz;file“c:\sas\data
.out";;putxyz;cards;125347458;run;在SAS的子目录里有一个文本文件,扩展名为out。是三行数据。将其读入:dataa2;infile'c:\SAS\data.out';inputxyz;p
rocprintdata=a2;run;3.输出数据到SAS永久数据集libnamestudy'c:\sas\mydata';datastudy.a;inputxyz;cards;14526991211;Run;读入S
AS内部永久数据集libnamestudy„c:\sas\mydata‟;procprintdata=study.a;;run;五、数据集的操作1.SET语句SET语句是数据集操作中的一个基本语句,用于从一个或多个数据集中读取观测数
据,生成一个新的数据集。SET语句的基本格式为:SET数据集名<(选项)>;在SET语句中,数据集可以有一个或多个。如果数据集名只有一个,则直接从该数据集继承数据。如果数据集有多个,则应该考虑采用何种方式将这些数据集串联起来。在SET语句中,每个数据集名后面的选项用来规
定在读入该数据集时对变量或观测进行相关的操作,如果没有数据集名后面的选项,则读入数据集中所有的变量和观测。选项与说明选项说明Keep=变量名规定读入数据集时规定保留的变量。Drop=变量名规定读入数据集时规定删除的变量。Rename旧变量名=新变量名对
变量重新命名。Where=(表达式)读入满足表达式的观测Firstobs=n规定从数据集中的第n行开始读入观测数据Obs=m规定从数据集中的第m行结束读入观测数据3.数据集的串联(纵向合并)(1)简单串联简单串联就是将所有要合并的数据集简单叠放在一起。data新数据集名;set
数据集名1(选择表达式)数据集名2(选择表达式)...;run;可以附加选项来规定在读入该数据集时对变量和观测进行选择和删除。并包含所有的变量。如果某个数据集的没有此变量,则认为是缺失值。DATASCORE1;INPUTNUMS1-S3;C
ARDS;100178899210028792971003647488;DATATOT;SETSCORE1;TOTAL=SUM(OFS1-S3);PROCPRINT;RUN;dataa;inputxy;cards;1278912;datab;inputx;cards;3
4125678;datac;seta(drop=y)b;;run;procprintdata=c;run;(2)排序串联如果各个数据集串联后需要按某个变量进行排序,除了使用set语句,还要使用by语句。data新数据集名;set数据集名1数据集名2...;by
变量名;run;4.数据集的并联(横向合并)1.简单并接数据集的并接是指将多个数据集横向合并起来,即新的数据集增加。dataa;merge数据集名1数据集名2…;run;如果不匹配会有缺失值。(2)匹配并联匹配并接是将两个或两个以上的数据集按照某个
变量进行并接。为了进行匹配并接各个数据集都至少有一个相同的变量。dataa;merge数据集名1数据集名2…;by变量名;run;dataa;inputnum$x@@;cards;0110220370480590612;datab;
inputnum$y;cards;0134021203560478;datar;mergeab;bynum;procprintdata=r;run;七、变量的控制1.DROP语句格式:DROP变量表;DROP语句指明某些变量不包括在建立的数据集中。但是这些变量
可在该数据步的所有编程语句中使用。在DATA步中,DROP语句位于任何地方所产生的效果都相同。DATAPARTS;INPUTNAME$S1S2;TOTAL=S1+S2DROPS1S2;CARDS;zhanglin7889wangqiang95872.KEEP语句格式:KEEP变量表;如
:KEEPNAMEAVG;KEEP语句说明在正被建立的数据集中包括哪些变量。在KEEP语句中不包括的变量仍适用于其它程序语句。KEEP语句可出现在DATA步的程序语句中的任何位置,它是非执行语句。KEEP语句的作用与DROP语句正相反。在同一DATA步中,不要同时使用KEEP语句和DROP语
句。3.LENGTH语句当一个字符型变量长度超过或不用缺省值8时,可用该语句指出变量的长度。如:DATAA;LENGTHNAME$13;INPUTNAMESEX$HW;CARDS;ZhangZhihuiF1.7052ZhaoChangtaiM1.7355;由于NAME变量已在LENGTH
语句中定义为字符型量,故INPUT语句中可不再用$号作定义。4.LABEL语句变量名不许超过8个字符长。使用LABEL语句给变量一个标记,标记长可达40个字符。它与变量值同时存于数据集中,它可以被许多SAS过程打印出来。DATAD;INPUTNUM$SEX$HW;LABELH='HEIGHT'W
='WEIGHT';CARDS;101M1.7261102F1.6852;PROCPRINTLABEL;注意:PRINT过程的PROCPRINT语句中应加LABEL选择项。指定变量的输出格式。对于日期时间型变量必须指定其格式。如:DATAEMPLO;INP
UTNAME$TDATE7.;FORMATTWORDDATE.;CARDS;ZHONGLI15JAN84LIUWEI03MAR85;PROCPRINT;Run;FORMAT语句把SAS输出格式WORDDATE.变量T联系起来。5.FORMAT语句datatime;x=date(
);formatxyymmdd8.2;putx=;run;给出今天的日期。timepart函数计算日期值的时间部分。datatime;inputxdatetime18.;formatxdatetime18.;cards;29nov20
12:09:25:0003dec2012:10:23:50;procprintdata=time;run;datatime2;settime;y=timepart(x);formatytime8.;run;procprintdata=time2;run;6.M
ISSING语句格式:MISSINGvalues;MISSING语句表明:在录入的数据中的某些值代表数值型数据的缺项值。例如,假设字母“A”代表在调查时家中无人,字母“R”代表拒绝回答。DATASURV;MISSINGAR;INPUTIDANSWER@@;CARDS;100121002R
100311004A10052;MISSING语句规定,在录入的数据行中,值A和R被认为是特殊的缺项值,而不是无效的数值型数据值。7.注释语句在语句开头加一个星号,就表示该语句的内容是注释信息而不予执行。如:*-example--;data;labeln="name"
h="height";inputnumn$h;cards;1001zhang31.731002li41.82;对于大段信息的注释,可用/*放在信息的开头,将*/放在注释信息的尾部。八、过程步介绍1.过程步语句一些
最基本的过程步语句语句功能PROC规定要运行的过程VAR规定过程中要分析的变量MODEL规定模型的因变量和自变量WEIGHT规定权数变量FREQ规定频数变量ID规定用于识别观测的变量最为标签SHERE选择满足条件的观测语句功能CLASS规定分类变量BY规定分组变量OUTPUT规定输出过程中产
生的数据集2.Print语句打印数据集的数据与output窗口。3.Sort过程SAS中有许多与BY语句配合使用的语句,在使用之前均要对数据集进行配需。一般用SORT语句进行排序。SORT过程的语句格式:procsortdata=数据集名<选项列表>;by<des
cending>变量名;run;说明:(1)proc语句规定开始运行sort过程必须制指定要排序的数据集名;(2)在sort语句中必须使用by语句,用来规定要进行排序的变量。Descending置于变量名前,是制定是升序还是降序排列,默认是升序。4.TRANS
POSE过程TRANSPOSE过程是对数据集进行转置的过程。语句格式:proctransposedata=数据集名<选项>;var变量名列表;id变量名;idlabel变量名;copy变量名列表;by变量名列表;Run;语句说明:(1)proc语句规
定开始运行transpose过程,同时指定要转置的数据集名;(2)var语句规定原数据集中要转置的变量。如果不指定则只转置数值型变量。不对字符型变量转置;(3)ID语句规定原数据集中的一个变量,该变量的值为转置后数据集中的变量名。(4)IDLABEL语句用来规定一个变量为转
置后的数据集提供标签。(5)copy语句对列出的变量不进行转置而是直接复制到输出的数据集中。(6)by语句规定对每个by分组内的数据进行转置,但是by变量不进行转置而直接复制到输出数据集中。