数据修改及程序结构资料_第1页
数据修改及程序结构资料_第2页
数据修改及程序结构资料_第3页
数据修改及程序结构资料_第4页
数据修改及程序结构资料_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

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

文档简介

1、数据修改及程序结构,1. 赋值语句,语句格式: variable=expression; 将表达式结果赋予一个变量。 说明:,Data a; x=15; grp=“A”; Run;,例如,,DATA da1; INPUT x1 x2 x3 x4 $; y=x1+x2+x3; average=mean(x1,x2,x3); id_num=_n_; total=x3+x4; /*数值+字符*/ CARDS; 3 1.2 0.5 5 2 2.4 0.9 7 5 3.2 0.8 9 ; RUN;,表达式的值赋给变量,结果变量类型,决定结果变量类型的准则: 如果表达式中的变量全为数值型,结果变量为数值型

2、 如果表达式中的变量全为字符型,结果变量为字符型 如果表达式中的变量既有数值又有字符型,结果变量为数值型 如果赋值给已定义变量,则将表达式的值转换成该变量的类型,若无法转换,则给予缺失值,并在Log窗口中给出转换信息,表达式值转换,数值转字符 data a; X1=Passed; output; X1=86; output; run; proc print; run;,表达式值转换,字符转数值,不能转换时则报错 data a; X1=86; output; X1=92; output; X1=Passed; output; run; proc print; run;,结果变量长度,结果变量的长

3、度由第一次赋值的长度决定,除非事先由LENGTH语句规定好变量的长度,例如, data a; Name = “张三”; Output; Name = “欧阳踏歌”; Output; proc print; run;,/*第一次赋值时的长度为4,则变量长度定义为4*/ /*赋值长度为8,但只接受前前4个长度*/,输出结果: Obs Name 1 张三 2 欧阳,解决办法: 1. 先用LENGTH语句定义长度 2. 在第一次赋值时添加足够空格,data a; Length name $ 8; Name = “张三”; Output; Name = “欧阳踏歌”; Output; proc prin

4、t; run;,输出结果: Obs Name 1 张三 2 欧阳踏歌,data a; Name = “张三 ”; Output; Name = “欧阳踏歌”; Output; proc print; run;,2. 累加语句,语句格式: Variable+expression; 将表达式的值累加到变量(Variable)上 选项说明:,应用准则 累加变量在第一次执行前的初始值为0; 表达式的计算结果为缺失值时,取0代替; 表达式可以使用比较算符; 语句A+(-B)中的(+)是必须的,不能写成A-B。,data a; input id sex $; m=m+1; /* 赋值语句不能累加*/ if

5、 sex=“F” then K+1; /* 条件累加*/ cards; 1 F 2 M 3 F 4 F 5 M ; run; proc print; run;,例如,,Obs id sex m K 1 1 F . 1 2 2 M . 1 3 3 F . 2 4 4 F . 3 5 5 M . 3,赋值语句+RETAIN语句可实现累加,Retain语句使得其指定的变量的值在执行下一次DATA步重复时被保留,而不被清空为缺失值。如果没有RETAIN语句,SAS系统在DATA步每次重复执行之前,把用INPUT或赋值语句指定的变量设置为缺失值。,retain n 0; retain var1-var3

6、 (1 2 3); retain var1-var4 (1,2,3,4); retain;,n+1;,retain n 0; n=n+1;,等价于,data a; input id sex $; Retain m 0; /* 申明m值保留不清空,初值为0*/ m=m+1; /* 实现累加*/ cards; 1 F 2 M 3 F 4 F 5 M ; run; proc print; run;,赋值语句+RETAIN语句可实现累加,Obs id sex m 1 1 F 1 2 2 M 1 3 3 F 2 4 4 F 3 5 5 M 3,例如,对X平方后再累加,data a; input id s

7、ex $ x; total+x*2; /*对X平方后进行累加*/ cards; 1 F 80 2 M 78 3 F 90 4 F 85 5 M 68 ; run; proc print; run;,Obs id sex x total 1 1 F 80 6400 2 2 M 78 12484 3 3 F 90 20584 4 4 F 85 27809 5 5 M 68 32433,3. DELETE语句,作用: DELETE语句停止处理当前观测,该观测值不被读入到创建的数据集,SAS系统返回到DATA步的开头处理其他观测。 语句格式: DELETE; 通常与if 使用,删除满足条件的观测,例如

8、,与if语句联用,删除部份观察,例如: data jn; input ssn gra pre1 pre2 ; if gra4的条件,执行STOP语句,则立即停止数据步的执行,正被处理的那条观测不会被添加到数据集A中。A中只有3条观察。,data a; input x y; if x=4 then n+2; IF n4 THEN STOP; cards; 2 5 4 2 4 8 4 9 7 2 ; run; proc print; run;,例如,STOP停止处理DATA步,Obs x y n 1 2 5 0 2 4 2 2 3 4 8 4,6. ABORT语句,ABORT语句中止执行当前的DA

9、TA步,继续执行下一个DATA或PROC步。 执行ABORT语句时,当新创建数据集和已存在的SAS数据集同名时,不会覆盖已存在的数据集。 语句格式 : ABORT|;,数据步循环执行到第4次,即x=4, y=9时,n=6,满足n4的条件,执行ABORT语句,则立即停止数据步的执行,正被处理的那条观测不会被添加到数据集A中。如果数据集A先前已经存在,则不会被替换;如果数据集A先前不存在,则建立数据集A,只有3条观察。,data a; input x y; if x=4 then n+2; IF n4 THEN ABORT; cards; 2 5 4 2 4 8 4 9 7 2 ; run; pr

10、oc print; run;,例如,ABORT停止处理DATA步,Obs x y n 1 2 5 0 2 4 2 2 3 4 8 4,data a; input x y; if x=4 then n+2; IF n4 THEN ABORT; cards; 2 5 4 2 4 8 4 9 7 2 ; run; proc print; run;,例如,ABORT停止处理DATA步,在Log窗口打印错误信息,例如,ABORT语句使程序出现错误时终止执行,data b; input ssn pay ; if _ERROR_ then ABORT; cards; 111 100 aaa 200 444

11、300 ; proc print; run;,程序中有错误时,自动变量_ERROR_取值为1,否则为0;,7. LOSTCARD语句,作用: LOSTCARD语句用于重新对准输入数据。 当一个观测包含几个数据行,且当前观测缺少其中的一些行时,利用LOSTCARD语句可以防止SAS系统从下一个观测的数据行读数据作为当前观测的一部分。 语句格式 LOSTCARD; 使用LOSTCARD语句时,必须用IF-THEN语句给出丢失数据行的条件。 适合使用LOSTCARD语句的条件 每个观测有固定的输入数据行; 同一个观测的每个数据行都有一个同值的识别变量。,例,每个记录应包含两行数据,第一行为SID和性

12、别,第二行为SID和两门功课的成绩,读取信息完整的记录,data a; input SID sex $ #2 SID1 Score1 Score2 ; if SID NE SID1 then lostcard; cards; 101 男 101 89 95 102 女 102 85 98 200 男 211 男 211 78 86 ; proc print; run;,#2 表示指针移到该条记录的第2行,Obs SID sex SID1 Score1 Score2 1 101 男 101 89 95 2 102 女 102 85 98 3 211 男 211 78 86,LOSTCARD语句的

13、执行步骤,SAS日志上输出一个丢失记录卡信息,一条标尺及创建当前观测所读的数据行; 不输出观测到数据集,丢弃开始读入本组的数据行,返回到DATA步开头; 试图用该组第二个数据行开始并按INPUT语句规定的行数读数据行来创建观测; 当丢失记录行的IF条件仍是真的,SAS重复前三步; 对于IF条件不成立的一组数据行,SAS创建一个观测,并增加自动变量_N_的值。,data a; input id1 x $ #2 id2 y $ #3 id3 z $; if id1 ne id2 or id2 ne id3 then lostcard; cards; 101 A 102 B 102 B 103 C

14、103 C 103 C 104 D 105 E 105 E 105 E ; proc print; run;,例,当每条记录包含3个数据行时,Obs id1 x id2 y id3 z 1 103 C 103 C 103 C 2 105 E 105 E 105 E,例中,DATA步读3个数据行作为1个观测。第1个观测有2个丢失记录,第2个观测有1个丢失记录,第4个观测丢失2个记录。只有第3和第5个观测是完整的观测。 LOG窗口显示的信息: NOTE: LOST CARD. RULE: -+-1-+-2-+-3-+-4-+-5-+-6- 5 101 A 6 102 B 7 102 B NOTE:

15、 LOST CARD. 8 103 C NOTE: LOST CARD. 9 103 C NOTE: LOST CARD. 11 104 D 12 105 E 13 105 E NOTE: 数据集 WORK.A 有 2 个观测和 6 个变量。,语句格式 WHERE 逻辑表达式; 根据表达式选择满足条件的观察,8. WHERE语句,表达式中可使用的特殊运算符,WHERE语句的特点,WHERE语句的作用是选择满足条件的观测 WHERE语句读入数据集之前选择观测 WHERE语句是在执行数据集连接(SET),合并(MERGE),更新(UPDATE)或修改(MODIFY)之前进行的操作 使用WHERE语

16、句时,由于SAS系统只从输入数据集中读入满足条件的观测,所以SAS程序运行效率高 能用WHERE语句的地方一定可以用IF语句来代替,反之则不一定 WHERE语句对数据步中的新变量无效,只对读取其它已经存在的数据集中的变量有效,例,where语句选择观测,DATA da1; INPUT x1 x2 x3 x4 $; y=x1+x2+x3; average=mean(x1,x2,x3); CARDS; 3 1.2 0.5 5 2 2.4 0.9 7 5 3.2 0.8 9 ; RUN;,data da2; set da1; where y8; run;,从数据集da1中选择y8的观测,例,wher

17、e语句选择观测,DATA da1; INPUT x1 x2 x3 x4 $; y=x1+x2+x3; average=mean(x1,x2,x3); Where y8; CARDS; 3 1.2 0.5 5 2 2.4 0.9 7 5 3.2 0.8 9 ; RUN;,错误!变量y不是来自已经存在的数据集,不能在where语句中使用;此时,应该用: if y8;,Where age between 18 and 65; Where taxes between salary*0.30 and salary*0.50; Where taxes not between salary*0.30 and

18、 salary*0.50; Where idnum is missing; /*idnum为缺失值时 */ Where name is null; /*name为空时*/ Where score in (“A”,”B”); /*score为“A”或“B”时*/ Where name contains “B”; /*name中含有“B”的*/,例,where语句特殊算符示例,两个特殊模式: 百分号(%)可以替代任意多个字符 下划线(_)正好有一个字符与之匹配,LIKE算符,DATA da1; INPUT name$ x2 x3; CARDS; Boin 1.2 0.5 Aan 2.4 0.9 C

19、i 3.2 0.8 ooBCi 3.2 0.8 ; RUN; data da2; set da1; Where name like %B_i%; run;,匹配含有B开始的任意字符串 Where name like B%; 匹配第三个字符为B的任意字符串 Where name like _B%; 匹配含有B间隔一个为i的任意字符串 Where name like %B_i%;,例, 设变量name的取值为名字Diana,Diane, Dianna, Dianthus,Dyan。 使用LIKE算符来选择第一个字符为D的名字时,LIKE算符的不同选择模式与结果。 Name Like D_an; /

20、* 选择Dyan */ Name Like D_an_; /* 没有名子被选上 */ Name Like D_an_; /* Diana, Diane, Dianna, Dyan */ Name Like D_an%; /*上述列表的所有名字 */ Name Not like D_an%; /* 没有名子被选上 */,其它应用举例,例, 选择数值变量非0和非缺失的观测值 Where x; Where x and y; Where x/y; 例,选择字符变量非缺失的观测 Where c = ; where c is not missing; 字符变量C不能单独地作为逻辑表达式 例,选择一定范围内

21、的观测 Where x between 1 and 5; where 1=x5 then DO; y=x*2; put x= y= ; END; z=x+3; Cards; 6 4 8 9 3 8 ; Run;,例,与条件语句联用执行,运行后有哪些输出?,2. 循环DO语句 语句格式: DO 循环变量 = 初值 TO 终值 by 增量; (重复执行的SAS语句) END; 循环DO语句根据循环变量重复执行DO和END语句之间的语句 循环变量包含在创建的数据集中,可以用DROP语句删除 缺省 “by 增量”时,默认步长为1,如: do i=2 to 6 by 2; x=i*2; end; 当i=

22、2、4、6时,执行do-end之间的语句组;在i=6的循环执行之后,下一次循环时i=8,大于终值6,则循环停止。 逗号分隔循环变量的取值(数值或字符) do i=2, 11, 15, 19 to 27; 语句 end; do grp=A, B, C; 语句 end;,例:打印九九乘法表,1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 4*1=4 4*2=8 4*3=12 4*4=16 5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 7*1=7 7*2=14 7*3=21

23、 7*4=28 7*5=35 7*6=42 7*7=49 8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81,需要用到的语句与函数: do循环语句,put语句,left() trim()函数,|表示字符串连接,data _NULL_; do i=1 to 9; do j=1 to i; k=i*j; str=trim(left(i) | * | trim(left(j) | = | left(k); put #i (9*j+9) str ; end; end; run;,DO循环语句特殊选项,用法 Start ; 选项说明,do i=1 to 10 while(xy); do i=10 to 0 by 1 while(month=jan);,例,DO循环语句使用表达式选项,data a; do i=3,7,11 to 17 by 3 while(i*2=65; run;,上例中,数据集sen中仅包括pop中a

温馨提示

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

评论

0/150

提交评论