sas 基础表达式.docx_第1页
sas 基础表达式.docx_第2页
sas 基础表达式.docx_第3页
sas 基础表达式.docx_第4页
sas 基础表达式.docx_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SAS表达式简介SAS常数表达式(1)数值常数如: 1.23、 -5、 0.5E-10。(2)字符常数如: name1=TOME、 name2=MARY、name3=JOHN。(3)日期(d)、时间(t)、日时(dt)常数如: d1=01JAN80d、t1=9:25:19t、dt1=18JAN80:9:27:05dt。(4)16进制常数(略)SAS运算符(1)前缀算符与后缀算符前缀算符, 即正号或负号; 如: +Y; -25; -COS(30); +(X*Y); 后缀算符,即两个运算对象之间的运算符号, 如: 1+9; 4-2; 6NOT MIN MAX 逻辑非, 最小, 最大第 2 组*/ 乘, 除第 3 组+- 加, 减第 4 组或| 字串连接第 5 组 =GEGT大于等于, 大于IN等于一列元数中的某一个第 6 组&AND 逻辑与第 7 组或|OR逻辑或各组的计算顺序分别为: 第0组由内向外;其他各组均自左至右。第4组和第7组都给出了两种运算符号, 这是因为不同的系统可能只认识其中的某一种5.2SAS函数简介SAS软件中共有13类147个SAS函数, 现将其中最常用者的用法作一扼要介绍。算术函数(1)求一个数的绝对值的函数ABS和求一个正数的算术平根的函数SQRT如求-250的绝对值的语句为x=ABS(-250)、求625的算术平根的语句为y=SQRT(625)。(2)求若干个数的最大值的函数MAX和最小值的函数MINDATA; a1=2; a2=-9; a3=15; a4=-23;x=MAX(of a1-a4);y=MIN(of a1-a4); FILE PRINT; PUT x y; RUN;程序运行结果为x=15、y=-23。截取函数(1)取一个数的整数部分的函数INT、按规定舍入精度取一个数的近似值的函数ROUND;(2)取自变量的最小整数的函数CEIL、取自变量的最大整数的函数FLOORDATA;运行结果a=INT(223.456); b=ROUND(223.456, 100);a=223 b=200c=ROUND(223.456,10); d=ROUND(223.456,1);c=220 d=223e=ROUND(223.456,0.1); f=ROUND(223.456,0.01);e=223.5 f=223.46g=CEIL(2.4); h=CEIL(-2.4); i=FLOOR(2.4); j=FLOOR(-2.4); g=3 h=-2FILE PRINT;PUT a b c d e f g h i j;RUN; i=2 j=-3数学函数(1)以为底的指数EXP、自然对数LOG(以e为底)、以2为底的对数LOG2和常用对数函数LOG10(以10为底)DATA;a=2; b=2.718281828; c=10;w=EXP(a); x=LOG(b);y=LOG2(a); z=LOG10(c);FILE PRINT;PUT w x y z;RUN;程序运行结果为w7.389056、x1、y=1、z=1。(2)正弦SIN、余弦COS、正切TAN以及它们的反函数ARSIN、ARCOS、ATANu=SIN(a); v=COS(a); w=TAN(a); 这里a的单位是弧度, u,v w是实数;x=ARSIN(b); y=ARCOS(b); z=ATAN(b);这里b是实数, x, y, z是弧度。概率函数(1)泊松函数POISSON和二项概率函数PROBBNML求概率P=j0 e-(j/j!),函数的格式是: POISSON(,n),当=1、n=2时, 程序为:DATA; P=POISSON(1, 2); FILE PRINT; PUT P; RUN; 结果是: P=0.9197。求概率P=j0 CjnPj(1-P)n-j,函数的格式是:PROBBNML(p,n,m),当p=0.5、n=10、m=4时,程序为:DATA; P=PROBBNML(0.5,10,4); FILE PRINT;PUT P; RUN;结果是: P=0.37695。(2)在标准正态、学生t、卡、F下,若给定横坐标上的分位点和自由度的值, 可求出随机变量小于等于该分位点值的概率, 其语句的形式如下:Pu=PROBNORM(u); Pt=PROBT(t, df); Px=PROBCHI(x, df); Pf=PROBF(f,ndf,ddf)这里, u、t、x、f分别代表服从标准正态、中心t、中心卡、中心F的随机变量所取的分位点的值, df为自由度, ndf、ddf分别为F统计量中分子、分母的自由度(下同),Pu、Pt、Px、Pf为各随机变量取值小于给定分位数的概率。分位数函数在标准正态、学生t、卡 、F下, 若给定左侧尾端的概率P和自由度df的值, 可求出横坐标上的分位点的数值, 其语句的形式如下:u=PROBIT(P); t=TINV(P, df); 2=CINV(P,df); F=FINV(P,ndf,ddf)注意:实际使用时,常需计算出与右侧尾单的概率相对应的分位数,故可令P=1-alpha,这里,alpha就是事先规定的右侧尾端概率。样本统计量函数给定一组定量数据Xi, i=1, 2, , n, 欲求15种样本统计量之中某些统计量的值时,可用相应的样本统计量函数计算;若同时想得到所有这些值,可直接用UNIVARIATE过程计算。样本统计量函数在语句中的形式如下(以求样本均数的函数MEAN为例,其他用法相同):A1=MEAN(of X1-Xn);或A2=MEAN(X1, X2, , Xn); 第1种形式适合事先给变量X1Xn赋了值的场合; 第2种形式适合直接将具体数代入括号内)。7. 日期函数由两富同日期计算出它们之间的天数,可用INTCK函数。如:A=01JUN93D; B=01JUN94; C=INTCK(DAY, A, B); 则C=365(天)。其他从略。5.3SAS语句简介用在DATA步的文假作语句DATA语句表示一个数据步的开始, 并给出正被创建的SAS数据集的名字。(1)格式:DATA SASdataset(dsoptions);(2)说明: SASdataset是这个DATA步正被创建的一个或几个SAS数据集的名字;dsoptions告诉SAS系统关于正被创建的SAS数据集的更多的信息。(3)SAS数据集的名字的种类省略数据集名DATA; 等价于写: DATA _DATA_;每运行一次,SAS系统自动给创建的数据集依次命名为DATA1, DATA2, 。单水平名字DATA ABC; SAS系统自动命名为WORK.ABC,这里WORK是隐含的第一水平名字,即库名, 彻底退出SAS系统时,此数据集就消失了, 故称为临时数据集。ABC是第二水平名字,它可以由不超过8个字符组成。双水平名字DATA WWW.ABC; 这里WWW是库标记, 它靠LIBNAME语句建立起与某个目录之间的联系,如: LIBNAME WWW C:HULP; DATA WWW.ABC;枕明想在C盘的目录名为HULP下建立一个名为ABC.SSD的永久数据集,“.SSD”是SAS系统自动加的, 此文件只供SAS系统调用,用户无法直接阅读。调用方式为:LIBNAME WWW C:HULP;PROC 过程名 DATA=WWW.ABC;再写其他SAS语句。特殊的数据集名DATA _NULL_; 和 DATA _LAST_;前一个语句表明只想用PUT语句来输出一些结果, 但不想创建SAS数据集,可减少使用计算机的资源; 后一个语句表明SAS系统使用一个称为_LAST_的特殊自动变量来保留在一个SAS程序里最新创建的SAS数据集。注意: 在进入SAS DMS后要建立的第一个数据集名不能用_LAST_。同时使用多个数据集名如果你想对一组含有年龄和另外10个变量的资料按青年、中年、老年创建三个数据集, 可用如下的方法实现:DATA ONE TWO THREE;INPUT AGE X1-X10;IF AGE35 AND AGE55 THEN OUTPUT THREE;CARDS;(4)dsoptions(即SAS数据集的选择项)注意下面的、两个选择项仅当读已存在的SAS数据集时有效。DROP=变量名列表等号后面的所有变量将不出现在此数据集中;FIRSTOBS=n从数据集中第n个观测值开始处理;IN=变量名在SET, MERGE或UPDATA语句里规定一个新变量的名字,其取值指示观测从哪个数据集得到。如: MERGE ONE(IN=A) TWO; 即当前观测取自ONE时, 则A=1,这一信息可用于DATA步中间的程序语句(如: IF A=1 THEN ), 但此变量不进入正被创建的SAS数据集中;KEEP=变量名列表等号后面的所有变量将保留在数据集中;LABEL=单引号内写标签内容, 字符数应40;OBS=nn指被处理的已存在的数据集的最后一个观测的序号;TYPE=DATA(或TYPE=CORR) 指定SAS数据集的类型, DATA指一般的数据集、CORR指结构为相关矩阵的数据集, 常由SAS过程自动产生;INFILE语句(输入文件语句)用来定义一个外部文件, 它需用INPUT语句读取。外部文件可以是已存在磁盘上的, 也可以是从键盘上输入的数据行。(1)格式:INFILE filespecification options;(2)说明:filespecification用来定义文件, options给出选择项;(3)filespecification有以下三种形式:fileref(文件标志) filename(文件名) CARDS指明输入的数据紧跟着CARDS语句,如: INFILE C:HULPABC.PRG options; 这里C:HULP是文件标志、ABC.PRG是文件名;又如: INFILE CARDS options; 这里CARDS相当于文件标志。(4)下列选择项(options)可以出现在INFILE语句中:COLUMN=variable或COL=variable定义一个变量, 其值是指针所在的当前列位置。END=variable定义一个变量, 作为文件结束的标志。EOF=label是一个语句标号, 当INFILE语句读到文件末尾时, 作为隐含的GOTO语句的目标。FIRSTOBS=linenumber要求从指定的行开始读取数据, 而不是从文件的第一个记录开始。LENGHT=variable定义一个变量, 其值是当前输入数据行的长度。OBS=n指定从一个顺序输入文件中读取数据的最后一个观测(即第1第n个观测)。INPUT语句(输入语句)描述一个输入记录中数值的安排情竣给相应的SAS变量赋输入值,该语句只能用于读入存放于外部文件中的数据或跟随在CARDS语句之后的数值。(1)一般形式:INPUT specification;(2)说明:在INPUT语句中有四种方式描述一个记录值, 即列格式输入(column) INPUT variable $ startcolumn-endcolumn .decimals;variable变量名,$指明其前面的那个变量是字符型的,数值型的变量则不写$, 若这个变量在前面已被定义为字符袖量, $也不需写; startcolumn是包含该变量值的输入记录的第列的列号, -endcolumn是包含该变量值的输入记录的最后一列的列号。如果变量值只占一列, 则省去-endcolumn。 .decimals如果输入值不包含一个隔开整数部分与小数部分的小数点,decimals用来指明小数部分的位数。如: INPUT number 10-15.2; 读取number的数值时,小数部分是两位。若输入值分别是2314, 2, 400, -140, SAS以.2形式读取的值依次是23.14,0.02,4.00,-1.40。又如: INPUT NAME $ 1-8 AGE 11-12; 这里1-8和11-12指列号。自由格式(free-format)或表格式输入(list)INPUT variable $ &;variable变量名,&指明字符袖量值中可能在一处或多处含有单一的空格, 此时不同变量值之间需用两个或两个以上的空格隔开。如:INPUT NAME $ & AGE X1-X4; NAME的值可以形如: J. JONES或J. M. MARY。自由输入格式适用场合:输入的值彼此之间至少有一个空格隔开、用小数点(.)而不是空格表示缺失数据、字符型数值的最大长度为8个字节,除非在LENGTH、ATTRIB或INFORMAT语句中规定了字符袖量的长度。指定格式输入(formatted)INPUT variable formatmodifier informat;variable变量名,formatmodifier修改输入格式读取数据的方式,有两个格式修饰符:“:”和“&”,informat给出读取数据时的输入格式,它总是包括一个()或以()结尾,如:INPUT NAME $CHAR10. AGE 2.; 这里$CHAR10.和2.分别指定了字符袖量NAME和数值袖量AGE的输入格式; 当输入的值都是以同一方式排列时,就可以用组格式表来表示格式。该格式表是被循环使用的, 直到所有变量都被赋值;带有序号的变量值可用简单的形式列出来, 如:INPUT X1-X5 (4.1); 这表明5个变量的值都按整数部分占两位,小数部分占一位的格式输入,加上小数点共4位。两个格式修饰符的含意: “:”把输入格式与自由格式输入的扫描特征结合起来,表明变量的值是从以下非空格列中读取的, 直到第1次遇到以下三种情况: 下一个空格列、先前定义的变量长度已读满、数据行结束;“&”表明一个字符型输入值可能含有一个或多个嵌在当中的单个空格,此时,不同的数据之间应该用两个以上的空格隔开。命名格式输入(named)INPUT pointercontrolvariable=$informat;“=”指明使用的是命名格式输入方式。如: INPUT NAME = $ AGE =;(3)高级INPUT语句用指针来跟踪读取数据的位置。列指针控制:绝对和相对列指针控制符分别为“”和“+”,其作用是把指针移到指定的列,“5”与“+5”的区别是: “5”是把指针直接移到每行的第5列、而“+5”是把指针从当前的位置向后移动5列。有9种列指针控制:n把指针移到第n列。如:INPUT 15 AGE 2.;把指针移到第15列, 从数据行的第15-16列读数据值赋给变量AGE。pointvariable 把指针移到指针变量所指的列。如: A=15; INPUT A AGE 2.;(expression) 把指针移到表达式值所指的列。如: A=5; INPUT (A*3) AGE 2.;characterstring 把指针移到数据行中字符串charaterstring之后的第一个非空格列。charactervariable 首先确定字符变量所取值(即字符串)在输入行的位置,然后把指针移到这个字符串之后的第一个非空格列。(characterexpression) 先确定字符表达式值的位置,然后移指针到其后第一个非空格列。+n 把指针向右移动n列。如: INPUT 20 AGE 2. +4 WEIGHT;+pointvariable 把指针移到指针变量值所指的列。如: A=-2; INPUT X 1-15 +A Y 2.;此语句表明从数据行的1-15列取值赋给变量X, 然后指针左移2列从第13列开始取值赋给变量Y。+(expression)把指针移到表达式所指的列。如: INPUT X 1-15 +(-2) Y 2.;行指针控制:其控制符有“#”和“/”, 其作用是把指针移到指定的行。有4种行指针控制:#n把指针移到第n行。#pointvariable把指针移到指针变量值所指的行。#(expression)把指针移到表达式值所指的行。/把指针移到下一行的第一列。如: INPUT NAME $ SEX $ / AGE WEIGHT;行固定标识符: 和两种, 写在INPUT语句的结尾, 其区别在于:一个数据行用多个INPUT语句读取数据, 用一个结尾;一个输入行数据含有多个观测值,用两个结尾。FILE语句(文件语句)定义当前的输出文件, 并且是一个外部文件,一般要与PUT语句配合使用。其选择项可用来控制文件输出的形式, 还可定义变量来跟踪指针所在的当前行和列的位置、定义在每一个新的输出页中开始打印的抬头。在同一个DATA步中可用多个FILE语句,它是可执行语句,故可用于条件(IF-THEN)语句中, 也可用到其他一些语句。(1)格式:FILE filespecification options;(2)说明:filespecification用来定义外部文件, options给出选择项;(3)filespecification可有如下形式:fileref给出文件标志, 也是PUT语句输出的对象, FILENAME语句把一个外部文件同fileref联系起来;filename定义外部文件的全名字, 文件名要写在单引号内;LOG如果在PUT语句之前不使用FILE语句或使用该语句, 但形式为FILE LOG options;其输出内容都将送到LOG窗口内;PRINT把PUT语句产生的数据行输出到标准SAS打印文件中去(若用 “FILEPRINToptions;”形式, 则将内容直接送到OUTPUT窗口中去)。(4)用来控制当前输出文件形式的选择项很多,从略。PUT语句把内容输出到SAS系统的LOG窗口、 SAS过程中的输出文件或任何在FILE语句中定义过的文件中去。由最近的FILE语句指明的文件叫当前输出文件。若在当前的DATA步执行中,PUT语句前没有FILE语句,则PUT语句把内容输出到LOG窗口。PUT语句可以输出变量值或字符串。输出变量值有以下三种方式:列输出格式、自由格式和指定格式。(1)格式:PUT specification;(2)说明:specification指的是变量的值或字符串内容是以何种形式输出的。(3)specification的具体内容有:variable列出要输出的变量名;characterstring指明在PUT语句中要输出的字符串,字符串一定要写在单引号内;pointcontrol把指针移到规定的行和列上;_INFILE_输出当前输入文件或CARDS后面的数据行中的最后一行;_ALL_输出所有变量的值,包括_ERROR_,_N_,以及在DATA步中用命名式输出定义的变量。PUT语句可以没有specification,如: PUT;它把当前输出行的内容输出到当前文件中去,即使当前行是空的, 也是如此。(4)列格式输出 PUT variable= $ startcolumn-endcolumn .decimalplaces;“=”在输出变量值的同时写上变量的名字及其符号, 其他项的含义见INPUT语句中相应部分。(5)自由格式输出PUT variable= $;variable输出变量名,=指定变量值用命名的方式输出,$字符袖量的标志。(6)指定格式输出PUT variable= format.;=指定变量值用命名的方式输出,其它项的含意见INPUT语句中指定格式输入的相应部分。(7)指针控制与格式修饰符关于指针控制参看INPUT语句中相应部分, 这里对不同之处作些介绍。_PAGE_把指针移到新的一页的第一行PUT _PAGE_;OVERPRINT把当前输出内容输出到前一个输出行中例如要在标题“TITLE OF PAGE”下面加一横线, 其语句是: PUT TITLE OF PAGE overprint _;格式修饰符“n*”指明其后的格式将被重复使用n次。如: PUT X1-X5 (5*7.2);格式修饰符“:”,它后面跟一个格式, 指明用此格式输出变量值, 但要去掉前面或后面的空格, 不同数值之间只留一个空格;输出数组元素: PUT array*; 数组不能是临时数组,*处不能是数组指示变量, 但可以是在PUT语句执行时可估值的任何SAS表达式,也可直接用*号。SET语句从一个或几个SAS数据集中读取观测值。此语句的适用场合:完全复制现存的数据集;把一个数据集分成几个子数据集;把几个现存的数据集合并成一个新数据集。(1)格式:SET SASdataset(dsoptions IN=name)setoptions;(2)说明:SASdataset指定一个或几个现存的SAS数据集。在一个SET语句中最多可以指定50个数据集;dsoptions是数据集的选择项; name是产生一个新变量,在DATA步中,如果这个数据集对当前的观测有贡献,其值为1,反之为0;setoptions定义SET语句的选择项。(3)数据集的选择项(dsoptions)参见DATA语句中相应部分。(4)SET语句的选择项(setoptions)NOBS=name产生一个变量,其值是输入数据集的观测总数。如果多于一个数据集列在SET语句之后,NOBS的值就是所有这些数据集中观测总数。该变量不含在新产生的数据集中。END=name产生一个变量,作为文件结束的标志。该变量的初值为0,当SET语句读完输入数据集的最后一个观测或合并后的数据集的最后一个观测时,其值为1。(5)复制新的数据集把数据集A复制成数据集B的方法: DATA B; SET A;(6)由数据集A生成含有部分变量的子集B,可用下面3种方法之一来实现:在SET语句中使用DROP=或KEEP=的数据集选择项,如: DATA B; SET A(KEEP=X Y);在DATA步中使用DROP与KEEP语句,如: DATA B; SET A; KEEP X Y;在DATA语句中使用DROP=或KEEP=选择项,如: DATA B(KEEP X Y) C(KEEP Y); SET A;(7)由数据集A生成含有部分观测的子集B,一般要借助子集IF语句来实现,如:DATA B; SET A;IF SEX=M;最后一句还可写成:IF SEX=M THEN OUTPUT;或IF SEX=M THEN DELETE;其目的都是选择SEX的值为M的观测作为新生成数据集的观测。(8)由数据集A生成含有新产生的变量的数据集B,如:DATA B; SET A; TOTAL=SUM(OF X1-X5);(9)数据集的连接把若干个数据集按先后次序一个一个的连接起来,形成一个大数据集。相同变量的数据集的连接,如:DATA C; SET A B;不同变量的数据集的连接,如果SET语句后列出的数据集中含有的变量不全相同, 则从一个数据集中来的观测对于那些只有在其它数据集中定义的变量,其值为缺失值。(10)按已排好的顺序合并数据集要先用SORT过程排序,再借助BY和SET语句来实现,如:PROC SORT DATA=A; BY X; PROC SORT DATA=B; BY X; DATA C; SET A B; BY X;MERGE语句(合并语句)把两个及以上数据集中的观测合并成一个观测作为新生成的数据集的观测(即一一对应地左右连接),合并观测时的方式依赖于是否有BY语句伴随着MERGE语句。(1)格式:MERGE SASdataset(dsoptions IN=name)SASddataset(dsoptions IN=name)END=name;(2)说明:END=name产生一个变量标志着文件的结束,其初值为0,当MERGE语句执行到最后一个观测时,其值为1,该变量不包括在正被创建的数据集中。其他项的含义参见SET语句。(3)一对一合并(没有BY语句)当没有BY语句伴随MERGE语句时, MERGE语句使全部数据集中的第i个(i=1,2,)观测依次合并成一行, 成为一个新的观测。新生成的数据集中观测总数为全部数据集中观测个数的最大值。如果某数据集的观测较少,合并后,短缺的那些观测将以缺失值的形式出现; 如果某一个变量同时出现在几个数据集中,合并后,只有一个变量,其值是列在MERGE语句中含该变量的最后那个数据集所对应的数。(4)匹配合并(带有BY语句)如果想把两个或两个以上数据集按照一些变量值合并,则需借助BY语句来实现,一个MERGE语句只能有一个BY语句相伴随, 并且,各数据集中至少有一个变量(称为BY变量)是相同的,每个数据集必须先按这些变量排序。UPDATE语句(更新语句)该语句有一个特殊功能, 即用数据集乙(称为修改数据集) 去修改数据集甲(称为主数据集)。该语句一定要用BY语句伴随,BY语句给出合并观测时的共同变量的名字; 主数据集中不能含有多于一个的共同变量值相同的观测。产生的新数据集包含主数据集中的所有观测, 如果修改数据集含有主数据集中没有的观测,则这些观测出现在新的数据集中。(1)格式:UPDATE masterdataset dsoptions (IN=variable1)transactiondataset (dsoptions IN=variable2) END=variable;(2)说明:master.和transaction.分别为主数据集名和用以修改的数据集名,其他项参见SET和MERGE语句。BY语句在DATA步中用以控制MERGE、SET或UPDATE语句的运行并建立特殊的组合变量。(1)格式:BY DESCENDING GROUPFORMAT variable NOTSORTED;(2)说明: DESCENDING指明数据集是按下降的次序对其后的变量值进行排序、GROUPFOR-MAT是当SAS给自动变量FIRST.和LAST.赋值时, 指明该语句中的变量是按其格式化值使用的,若缺省, 则用非格式化值、variable定义数据集用以排序的每个变量名、 NOTSORTED指明具有同BY值的观测组合在一起, 但BY值不必按字母或数字顺序排列, 此选择项可出现在BY语句中任何地方。10CARDS与CARDS4语句该语句标志着后面紧跟着数据行。通常用前者, 格式为: CARDS;并用一个分号(独占一行)作为数据行结束的标志; 当数据行中含有分号作为输入数据时,用后者,格式为: CARDS4;并用个连续的分号“;”(独占一行)作为数据行结束的标志。用在DATA步的运行语句赋值语句如X=3; 或Y=a+b; 注意此处a、b是事先已赋过值的变量或是具体的数值。累加语句如N+1; 开始N被置为0,以后DATA步每执行一次,N的值就增加。DELETE语句如DATA abc; INPUT x ; IF x100 THEN DELETE; CARDS;(数据行); RUN;所建立的SAS数据集abc中就不会包含大于100的数值。LOSTCARD语句当每个观测写成几个数据行时,若当前观测丢失其中的一行或几行,LOSTCARD语句可以防止SAS系统从下一个观测的数据行读数据作为当前观测的一部分。如DATA abc; 103CINPUT id1 x$ #2 id2 y #3 id3 z$; 103CIF id1 NE id2 OR id2 NE id3 THEN LOSTCARD; 104DCARDS;105E101A105E102B105E102B;103CRUN;说明此例中,DATA步每三个数据行作为一个观测。第、两个观测都丢失了两个记录;第个观测丢失了一个记录;第、两个观测是完整的。 新建立的数据集abc中只有两个完整的观测,不完整的观测不会进入新建的数据集。STOP语句与ABORT语句按规定条件停止处理当前执行的DATA步,并继续执行其后的DATA语句或PROC语句。两者的区别在于STOP语句属于正常停止执行当前DATA步,不输出出错信息; 而ABORT语句属于异常中止执行当前DATA步,输出出错信息。使用的方法是IF (条件) THEN STOP;IF (条件) THEN ABORT;WHERE语句该语句允许用户在SAS系统把观测读入DATA步之前从已存在的SAS数据集中选择符合特殊条件的观测,常放在SET(设置)、MERGE(合并)、UPDATE(更新)语句之后使用。如DATA one;SET aaa;WHERE x100;RUN;在把已存在的SAS数据集aaa复制到新数据集one之前,阻止aaa中与x100对应的所有观测进入one中去。WHERE语句不是可执行语句,它不能作为IFTHEN语句的一部分。它与子集IF语句的主要区别在于在可用WHERE和子集IF语句时,WHERE语句的效率高得多;而子集IF语句可用在DATA步的任何地方。OUTPUT语句(输出语句)该语句告诉SAS系统输出当前这个观测到正被创建的数据集中。当用户需要在以下三种情况下控制观测值的正常输出时,OUTPUT语句很有用从每行输入数据创建二个或更多观测; 从一个输入文件创建几个SAS数据集;把几个输入观测组合成一个观测。如DATA a; DO i=1 TO 10; INPUT x ; OUTPUT; END; RUN;(上述用途)。DATA b; IF x5 THEN DO; y=x*10; PUT x=y=; END; z=x+3;这些语句表明DO与END之间的两句仅当x5时被执行,否则,跳到赋值语句z=x+3去执行。(2)循环DO语句格式为DO 下标变量=初值 TO 终值 BY 增量 WHILEUNTIL(表达式);如DO i=1 TO 10;DO i=1 TO 10 WHILE(xy);DO i=0.1 TO 0.9 BY 0.1, 1 TO 10 BY 1, 20TO 100 BY 10;(3)DO OVER语句格式为DO OVER 数组名;该语句对隐含下标数组元素执行DO组里的语句。如DATA test; DO OVER s; CARDS;INPUT sc1-sc5; s=s*100;0.95 0.88 0.57 0.90 0.65ARRAY s sc1-sc5;END; ;(程序的第部分)(程序的第部分)(程序的第部分)这里的“DO OVER s;”等价于“DO _i_=1 TO 5;”。(4)DO WHILE语句格式为DO WHILE(表达式);如n=0; DO WHILE(n LT 5); PUT n=; END;只要n=5); PUT n=; n+1; END;这些语句重复被执行直到n5时停止。END语句END语句是组成DO组或SELECT组的SAS语句中的最后一个语句。格式为END;SELECT语句(选择语句)格式为SELECT 表达式; WHEN (表达式) 语句; OTHERWISE 语句; END;该语句开始一个SELECT组,在组内,当一个特殊条件成立时, 从WHEN语句选择一个SAS语句来执行,至少必须出现一个WHEN语句。 如果WHEN条蓟成立,选择OTHERWISE语句执行一个规定的语句。END语句结束SELECT组。如DATA new;SELECT(a); OTHERWISE x=1;SET old;WHEN(1) x=x*10; END;x=UNIFORM(0); WHEN(2); RUN;WHEN(3) x=x*100;(程序的第部分)(程序的第部分)(程序的第部分)这是假定原有数据集old中的变量a的取值为1,2,3或缺失。 当a依次取这些值时,变量x按要求分别作了如下变换x*10、不变、x*100、x=1。IF语句(1)条件IF语句IFTHEN语句格式为IF 表达式 THEN 语句; 如IF x=3 THEN y=x;IFTHENELSE语句格式为IF 表达式 THEN 语句; ELSE 语句; 如IF year=1984 THEN COLOR=BLUE; ELSE COLOR=RED;(2)子集IF语句格式为IF 表达式; 如IF sex=F; 产生的子数据集仅包含sex值为F的那些观测。GO TO语句(无条件转移语句)格式为GO TO 语句标号; 该语句常出现在IFTHEN语句中作为THEN的分句。如DATA a; x=3;CARDS;INPUT x y; count+1;(数据行)IF 1=x=5 THEN GO TO ok;ok: sumx+x; ;(程序的第部分)(程序的第部分)(程序的第部分)如当前输入的数据行中x值属于1,5时,转移到用标号ok指示的目标语句,并从该语句往下执行。LINK语句(连接语句)格式为LINK 语句标号; 该语句通知SAS系统立即转到由LINK语句指示的语句标号并从那里开始继续执行语句直到一个RETURN被执行。用法与GOTO语句类似,区别见RETURN语句。RETURN语句(返回语句)格式为RETURN;在DATA步当前这个位置上停止执行语句并在继续执行之前

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论