




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章SAS语言与数据管理返回目录❏2.1
SAS语言构成❏2.2
SAS的高级编程功能❏2.3
SAS语言的数据管理功能❏2.4
SAS宏介绍❏2.5用proc
sql管理数据返回2.1
SAS语言构成❏SAS语句❏SAS表达式❏SAS程序规则返回2.1.1
SAS语句❏定义:SAS语句是构成SAS程序中的数据步和过程步的基本单位,一般由一个关键字开头,以分号“;”结束,其中包含SAS名字、特殊字符、运算符等。❏说明:❏SAS关键字是用于SAS语句开头的特殊单词;❏除赋值、累加、注释及空语句外,SAS语句一般都有关键字开头;❏SAS名字是用来标识各种SAS成分,如变量、数据集、逻辑库等;❏SAS名字由1-32个字母、数字、下划线组成,第一个字符必须是字母或下划线;(逻辑库名最多8个字符)❏SAS关键字和名字不区分大小写。2.1.2
SAS表达式❏定义:数据步中用于计算的是SAS表达式,它是把常量、变量、函数及运算符、括号连接起来的一个式子。❏说明:❏常量:有数值型、字符型两种,并且可表达日期、时间的数据类型。如12,-7.5,2.5E-10,’Beijing’,”LiMing”,’13JUL1998’d,’14:20’t。❏变量:有数据值、字符型两种。时间、日期系统自动存为数值型的。数值型变量在数据集中存储一般使用8个字节,字符型变量默认的长度是8个字符。可以使用Length语句改变字符型的长度,格式为:Length字符型变量名$长度;如 Lengthname$10;❏功能:算术运算符用来执行一个算术运算符 +
-
*
/
*号运算符之一*——算术运算符含加减乘除乘义
方运算符之一——比较运算符❏功能:比较运算符用来给出两个量间的关系(2)In是SAS特有的运算符,检是否含在列表中,注符:=(或1)^比=较运>算符<计算结>=果或只号示e)q
或“或假ne”或(g用t
0或表l示t
g)e。有<=两种或le查变量:in“真”(用1表含如判等断变不量等pr大ov的小取值是大否于为4小个于直辖检市查之变一量可是用否表达义式于:provin于(’北于京’等,于’天津等’,于’含上在海列’表,中’重庆’)符
&
|
^号或运算或符或之一——逻辑运算符an or
not含义d与❏功或能:非逻辑运算符用来判断两个表达式之间的逻辑关系如:(salary>=1000)and(salary<2000)表示❏工资收入在1000~2000之间(不含2000)❏ (age<=3)or(sex=’女’)表示❏3岁以下(含3岁)的婴儿和妇女SAS函数(详细内容参见教材P48~53页)❏1.数学函数❏ABS(x):求x的绝对值❏MAX(x1,x2,x3,…xn):求所有自变量中的最大值❏MIN(x1,x2,x3,…xn):求所有自变量中的最小值❏SQRT(x):求x的算术平方根❏LOG(x):求x的自然对数❏EXP(x):求指数函数ex❏SIN(x)、COS(x)、TAN(x):三角函数正弦、余弦、正切函数❏…….SAS函数(详细内容参见教材P48~53页)❏2.数组函数❏3.字符串函数❏4.日期和时间函数❏5.分布密度函数❏6.分位数函数❏7.随机函数❏8.统计函数❏注意:统计函数只对变量中的非缺失值进行计算的,而且计算是对行进行的,这与统计过程不同。2.1.3
SAS程序规则❏SAS程序由SAS语句构成,每个语句以分号“;”结束。❏一个语句可以写在一行也可写在多行(不需要续行标志),也可一行写多个语句;❏只要允许用一个空格的地方就可加入任意多个空格;❏SAS关键字与名字大小写不区分,字符串要区分;❏SAS注释语句是用/*与*/在两端界定注释内容;❏SAS数据步用data语句开头,以run语句结束;❏SAS过程步用proc语句开头,以run语句结束;【例1】某班5个学生4门课程成绩如表,计算每个学生的平均成绩和各科平均成绩。学号统计学数分高代英语2007012017475767720070120273677580200701203728789952007012047168747520070120570809060【Try】❏如果数据中的第5个同学的数分成绩为空,输出结果会怎样?2.2
SAS的高级编程功能❏data语句生成一个数据集,格式为:Data数据集名;❏说明:❏如果生成永久性数据集则用两水平名;❏如果为临时性数据集则用单水平名;❏如果省略数据集名,则系统会自动生成一个临时性数据集名;❏如果数据集名为_null_,则表示本数据步不需要生成数据集。2.2.1赋值语句❏功能:计算一个值并存放到变量中,格式为:变量名=表达式❏如 avg=math*0.5+chinese/120*100*0.5y=mean(ofx1-x4);y=sin(x)**2;newv=.;/*缺失值*/❏注:等号“=”右端的表达式的各变量应该是存在的,否则会得到缺失值结果。2.2.2输出语句❏功能:将输出立即显示在Log窗口中,格式为:Put 变量名或字符串列表;❏说明:❏Put语句中列出的各项可以是变量或字符串,各项之间用空格隔开❏put语句中也可使用“变量名=”来指定输出项,可以显示带变量名的输出结果。❏put语句也可用“域宽.精度”方式指定输出的格式❏若希望put语句的下一次输出在同一行,则在put语句后加一个“@”符号。❏put语句的默认了输出是Log窗口,如果想使输出转向output窗口,则需在put语句前加上语句Fileprint;【Try】练习以下综合程序:2.2.3分支结构1.条件IF语句如果需要在条件满足时执行某一操作,可用:If条件then语句;例如:ifx>0thenput‘x为正数’;如果需要同时规定条件不满足时执行的操作,可用:If条件then语句1;Else语句2;例如:ifx>=0thenx=2*x;Elsex=-x;注:以上then和else后的语句都是单个语句;如果当条件成立时要执行几个语句(即复合语句),则应该把要同时执行的几个语句用DO-END括起来【例2.3】自己练习程序prg2.3.sas。2.Select分支语句❏用法一:select(选择表达式);语句1;语句2;when(值列表1)when(值列表2)……otherwise 语句n;end;❏说明:❏“选择表达式”是一数值型或字符型的变量或表达式;❏“值列表”为一项或若干项,多项之间用逗号“,”隔开,数值类型与选择表达式相同;❏“语句”为单个语句或复合语句;❏执行过程:先计算出选择表达式的值,然后由前往后与值列表中的值比较,发现相等则执行对应的语句,然后退出select结构(不再查看后面的值列表)。如果选择表达式的值不等于任何值列表中的值,则执行otherwise中的语句。【例2.4】练习以下程序prg2.4.sas.2.Select分支语句❏用法二:语句1;语句2;语句n;select;when(条件1)when(条件2)……otherwiseend;❏说明:❏select语句后没有选择表达式,各个“条件”是一逻辑表达式;❏执行过程:由前往后检查when后的条件,它只执行第一个满足条件的when后的语句;如果所有条件都不满足,则执行otherwise后的语句。【例2.5】练习以下程序T2.5.sas.2.2.4循环语句1.计数Do循环❏格式:by步长;do计数变量=起始值to结束值循环体语句…;end;❏说明:❏执行过程:先把计数变量赋值为起始值,如果此值小于等于结束值,则执行循环体语句,然后把计数变量加上步长,再判断它是否小于等于结束值,如果是,则继续执行循环体,直到计数变量的值大于结束值为止。❏如果步长为1,则可省略“by步长”;如果步长为负值,则计数变量小于结束值时停止循环。❏循环体语句可以为多个语句;可以使用leave语句跳出循环;还可使用continue语句立即结束本轮循环并转入下一轮循环的判断与执行。【例2.6】以下程序prg2.6.sas是输出一个1,3,7,……19的立方表,且当立方大于1000时停止循环。2.Do-while型循环❏格式:dowhile循环继续条件;循环体语句…;end;❏说明:❏循环体语句可以为多个语句;❏执行过程:程序先判断“循环继续条件”是否成立,成立时执行“循环体语句”,再判断“循环断续条件”,如此重复,直到“循环断续条件”不再成立。【例2.7】以下程序Prg2.7.sas是判断1333333是不是素数。❏注1:其中mod(x,i)表示x除以i的余数❏注2:素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。3.Do-until型循环❏格式:dountil循环退出条件;循环体语句…;end;❏说明:执行过程:程序先执行循环体,然后判断“循环退出条件”是否成立,成立则结束循环,否则继续。注意每轮循环都是先执行循环体再判断是否退出。【例2.8】输入以下程序prg2.8.sas,看看输出是什么(可以输出n=1,n=2,…n=6)❏注:程序中的n+1是一种特殊写法,叫做累加语句,等价于n=n+1。2.2.5数组1.数值型数组❏定义格式:array数组名(维数说明)数组元素名列表(初始值表);例如: arraytest(3)mathChineseEnglish(0,0,0);❏说明:❏数组名为一个合法的SAS名字且不能与同一数据步中的其它变量重名;❏“维数说明”如果只说明元素个数,这时下标从1开始。❏“数组元素名列表”列出这个数组的各个元素实际代表的变量名,它们之间用空格隔开;❏“初始值表”给数据中各元素赋初值,按顺序对应;如果省略初始值,这时初始值为相应数组元素的值(如果数据元素没有值,则初始值为缺失值)2.2.5数组❏如果省略数组元素名列表,此时数组元素的变量名为数组名后附加序号,如arrayx(3);中数组x的各元素名为x1,x2,x3。❏数组维数也可用“下标上界:下标上界”来说明,如arraysales(95:97)yr95-yr97;❏一维数组的维数可用星号“*”,表示数组大小由提供的元素列表中的变量个数决定,如arraytest(*)mathChineseEnglish(0,0,0);❏定义二维数组,只要在维数说明中指定用逗号分开的两个下标界说明,如Arraytable(2,2)x11x12x21x22;2.2.5数组2.字符型数组❏定义格式:array数组名(维数说明)$ 元素长度说明数组元素名列表(初始值表);❏例如:arrayname(3)$10childfathermother;❏说明:字符型数组与数值型数组的定义时区别是:需加上一个$符号说明为字符型,并说明数组元素所能存储的字符串的最大长度。其它用法与数值型数组相同2.2.5数组3.临时数组——只由数组名和序号决定,没有对应的变量名❏定义格式为:array数组名(维数说明)—temporary—(初始值表);如:arrayx(3)_temporary_(0,0,0);它说明了一个有3个元素的临时数组x,其元素为x(1),x(2),x(即使变量x1,x2,x3存在,也与此数组无关。❏特点:它只用于中间计算,最终不被写入数据集。且临时数组与其它变量及非临时数组的不同是:它在数据步隐含循环中不论是否指定初始值都能自动保留上一步得到的值。临时数组也可以为多维,或字符型数组。4.数组的使用❏【例2.10】以下程序可以读入comp1~comp10的10个计算机销售额及prin1~prin6的6个打印机销售额变量,计算其总和。【综合应用例2.11】用随机函数模拟24次掷双骰,显示掷出的结果及掷出双六点的次数。❏解:❏注:均匀分布随机函数ranuni(种子数)产生(0,1)范围内的随机数,参数种子数为小于231-1的任意常数,如果为0或负数则采用系统时间作为种子数。2.3
SAS语言的数据管理功能❏2.3.1数据步的运行机制❏2.3.2用input语句输入数据❏2.3.3用attrib语句指定变量属性❏2.3.4读入外部数据❏2.3.5数据集的复制与修改(set语句)❏2.3.6拆分数据集❏2.3.7纵向合并数据集(set语句)❏2.3.8横向合并数据集(merge语句)❏2.3.9更新数据集(update语句)2.3.1数据步的运行机制❏一个SAS数据步相当于一个单独运行的程序,它具有其它语言所没有的功能,首先看如下程序:结论1:数据步如果有数据输入,则数据步中隐含了一个循环,框图如下:数据步开始继续运行遇到input、set、merge、update、modify时读入下一个观测读取非空?用程序语句对数据进行处理用output语句或数据步结束隐含的输出把观测写入输出数据集生成输出数据集数据步终止结论2:用retain语句则可以指定某些变量保留上一步隐含循环中的变量值如在上面程序开始时加入语句:Retainxy(1,2);其中(1,2)表示x,y的初值,则输出结果变成:文件print为:x=1y=2z=.x=10y=20z=30x=10y=20z=.x=100y=200z=300x=100y=200z=.work.a数据集为1 10 20 302 100 200 3002.3.2用input语句输入数据❏1.自由格式❏它是在关键字input后,按顺序列出每个观测的各个变量名,中间用空格分开。变量如果是字符型的,则需要在变量名后加一个“$”符号,“$”可以与变量名相连,也可空一个空格。如下程序自由格式条件:❏数据每行为一个观测,各数据值之间用一个或几个空格分隔;❏无论是字符型还是数值型,缺失数据都必须用小数点表示。❏字符型数据长度不能超过8个字符,不允许完全是空格,中间不允许有空格,开头和结尾如果有空格将被忽略。❏Input语句中必须列出每一项数据对应的变量名而不能省略中间或前面的某一个。❏输入数据时不必上下对齐,不需要知道每个变量的具体列数而只知它的次序。2.列格式❏它是在关键字input后除了列出变量名外,还需要在每个变量名(及“$”符)后列出该变量在数据行中所占据的列起始位置及结束位置。如下程序列格式条件:❏数据行必须上下对齐❏各数据项之间可以没有任何分隔,连续写在一起;❏字符型数据长度可以超过8个字符,中间可以有空格,开头和结尾如果有空格将被忽略。❏无论是字符型还是数值型,如果指定列位置为空白,则输入为缺失数据,用小数点表示。❏可以只输入数据行中的某些项而忽略其它项,【例2.15】输入一批身份证号码,但只输入其年、月、日信息,可用如下程序:❏注:列格式可与自由格式混用,如1.1.3节中的程序pr1.1.sas(3)有格式输入❏在关键字input后列出变量名及格式名,通常用来读入各种各样写法的日期。注意日期是用数值存储的,若要显示则要用format语句,指定特殊的日期输出格式。❏如程序【例2.16】:说明:❏其中yymmdd8.规定输入日期占据8列位置,不满8列则用空格补充,不能让后面的数据进行这8列。这样则可输入不带世纪的六位数日期,也可输入带世纪的8位yyyymmdd格式的日期值。❏用yymmdd10.则可输入带世纪数的中间有分隔符或无分隔的日期(如程序prg2.17)说明:❏如果日期变量输入值不在第一项,并且与前一项用空白分隔,则可在yymmdd10.前面加上一个冒号“:”,表示允许日期值前面有空白,如程序prg2.182.3.3用attrib语句指定变量属性❏1.变量属性有:❏字符型或数值型:input语句中字符型变量名后面要加$符号❏变量标签(lable):最长40个字符❏存储长度(length):数值型数据一般长度为8个字,字符型变量默认为8个字符❏输出格式(format):指定如何显示变量值❏输入格式(informat):指定如何把外部数据转换为SAS数据2.attrib语句❏功能:可以指定多个变量的属性,也可为一个变量同时指定多个属性属性=属性值变量名属性=属性❏格式:attrib变量名值……;❏例如下程序:2.3.4读入外部数据❏1.文本格式的数据文件(infile语句)❏功能:如果数据量很大时,用cards语句将数据放在程序中不利用于程序的维护,此时可将原始数据放在一个普通的文本格式的文件中,然后用infile语句指定输入文件名。❏格式: infile‘文件名’;❏【例2.20】1.1.3节中的程序prg1.1中的数据事先生成数据文件stud.txt,并存放在路径d:\mysasfile\下,则可用如下程序读入数据:❏说明:infile语句要写在input语句前;有了infile就不用cards语句了,infile关键字后面的文件名可以为全路径名,如果只有文件名则为当前工作目录。2.微机格式的数据文件(import过程)❏功能:SAS的导入向导(importwizard)可将其他格式的数据文件(如excel、Acess、Dbase、Lotus等格式)转换为SAS数据集,并可将操作过程保存为import过程的程序。❏【例2.21】将d:\mysasfile\c9501.sas导入SAS,生成数据集work.c95012❏操作过程P63页:File(文件)→importdata(数据导入),注意过高版本要另存为低版本。.保存为import过程的程序:2.3.5数据集的复制与修改(set语句)❏功能:实现数据集的复制,与其它语句配合使用可以实现对数据集的修改❏1.与if语句配合使用❏【例2.22】:将数据集work.c9501复制为数据集c9501a,并把超过100分的语文成绩都改为100分,如程序:❏说明:(1)程序中有一个隐含循环,直到读取输入数据集的最后一个观测。2.与keep或drop语句配合使用❏功能:keep语句指定复制数据集时要保留的变量,drop语句指定复制数据集时要删除的变量,❏【例2.23】:复制数据集c9501生成c9501b,但只包含name和avg两个变量,可用如下程序:3.与子集if语句配合使用❏功能:根据指定的条件,取出数据集的某些行组成的子集❏【例2.24】:只将数据集c9501中数学90分以上,语文100分以上的学生观测取出生成数据集c9501c,可用如下程序:❏注:其中子集if语句是没有then部分的,只有要满足的条件4.与数据集选项配合❏功能:用set语句引入数据集时可以给引入的数据集加选项,选项放在数据集名后面的括号内。选择包括:❏Keep=,指定要保留的变量;❏Drop=,指定要删除的变量;❏Obs=,表示读取观测到指定的序号为止;❏firobs=,表示从指定的序号的观测开始往后读取。4.与数据集选项配合❏【例2.25】:下面的程序生成一个大数据集huge,然后用数据步从中复制了前100行和前两个变量:2.3.6拆分数据集❏用set语句与output语句联合使用,可以根据某一原则将一个数据集拆分成几个不同的数据集。❏【例2.26】:把数据集c9501中的所有男生的观测放到数据集c9501m中,所有女生的观测放到数据集c9501f中,可用如下程序:说明:❏output语句是使SAS系统输出当前的观测或变量值写到正被创建的数据集中。❏数据步中有了output语句数据步流程中不再等到最后一个可执行语句结束后,自动写入观测到新数据集的操作,而只能由output语句指定输出。❏Output后没有数据集名,则输出到所有data关键字后新建的数据集。❏【例2.27】如下程序生成一个包含1~10及其平方的10个观测的数据集:2.3.7纵向合并数据集(set语句)❏功能:有时需要将几个数据集上下纵向合并起来,生成一个大数据集,可以在set语句后列出要合并的数据集名。如果要合并的数据集中含有的变量名都相同,则新数据集不产生新变量;如果不同数据集含有不同的变量名表,则新数据集包含所有数据集中所有不重复变量,其中原数据集没有的变量将赋予缺失值。❏【例2.28】建立score1和score2数据集,并合并成score数据集,程序如下:输出为:Obsnamesex
math
physicsenglishchinese1chenf
80
85
90652Li
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 共同经营货车合同范本
- 个人法制宣传教育工作总结
- 个人工作岗位调动申请书
- 业主授权委托书
- 个人之间合伙合同范本
- 企业餐厅布置租房合同范本
- 买卖房合同范本简易
- 原材供货合同范本
- 与律师事务所签署合同范本
- 前程无忧合同范本
- 建筑工地三级安全教育卡
- ID5S606B 600V高低侧栅极驱动芯片兼容PN7103-骊微电子
- 大学生人文知识竞赛报名表
- 小升初阅读理解专题课件
- 血浆吸附疗法课件
- 人教部编版九年级下册历史第四单元 经济大危机和第二次世界大战单元测试题
- 个人理财实务教学课件
- (完整版)新版PEP小学英语五年级下册教材分析
- 研发经费填报指标说明及核算方法
- 一年级思维训练(课堂PPT)
- 绿色光年20162017双上海闵行区江川绿色光
评论
0/150
提交评论