




已阅读5页,还剩49页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章 数据步修改与选择观测,清华大学经管学院 朱世武 Z Resdat样本数据: SAS论坛: ,本章介绍数据步中用于修改与选择观测的语句。 利用修改与选择观测语句,可以进行数值计算、数据集修改、观测子集选择及输出控制等。,赋值语句,语句格式: variable=expression; 将表达式结果赋予一个变量。 选项说明:,例7.1 赋值语句举例 data a; set ResDat.class; by sex; n=_N_; error=_error_; first_s=first.sex; last_s=last.sex; proc print; run; x=a+b; /* 规定新变量x,它是a和b的和*/ t(2)=sum(of x1-x5); /*规定数组元素,它的值是一函数值*/ a=a+b; /*规定一个已经存在的变量a,它的值为原来值和b之和*/,结果显示:,Obs Name Sex Age Height Weight n error first_s last_s 1 Alice F 13 56.5 84.0 1 0 1 0 2 Barbara F 13 65.3 98.0 2 0 0 0 3 Carol F 14 62.8 102.5 3 0 0 0 4 Jane F 12 59.8 84.5 4 0 0 0 5 Janet F 15 62.5 112.5 5 0 0 0 6 Joyce F 11 51.3 50.5 6 0 0 0 7 Judy F 14 64.3 90.0 7 0 0 0 8 Louise F 12 56.3 77.0 8 0 0 0 9 Mary F 15 66.5 112.0 9 0 0 1 10 Alfred M 14 69.0 112.5 10 0 1 0 11 Henry M 14 63.5 102.5 11 0 0 0 ,结果变量类型,决定结果变量类型的准则: 如果表达式中的变量全为数值型,结果变量为数值型; 如果表达式中的变量全为字符型,结果变量为字符型; 如果表达式中的变量既有数值又有字符型,结果变量为数值型。,结果变量长度,结果变量的长度是第一次扫描结果的长度,除非事先由LENGTH语句规定好结果变量的长度。 例7.2 第一扫描结果的长度不是所有数据中的最大长度时会出错 data a; lstknm=深发展; /*第一扫描结果的长度为4 */ lstknm =大秦铁路; /* lstknm的长度为4,所以显示结果为lstknm =大秦铁*/ proc print; run;,Obs lstknm - 1 大秦铁,例7.3 用LENGTH语句得到正确输出结果 data a; length lstknm $12; /* 规定变量lstknm的长度为12 */ lstknm=深发展; lstknm =大秦铁路; proc print; run;,Obs lstknm - 1 大秦铁路,累加语句,语句格式: Variable+expression; 累加语句累加表达式结果。 选项说明:,应用准则: 累加变量的观测被读入之前,值为0; 表达式的计算结果为缺失值时,取0代替; 表达式可以使用比较算符; 语句A+(-B)中的(+)是必须的,不能写成A-B。,例7.4 累加语句等于使用SUM函数和一个RETAIN语句 data a (keep=name height s_h); set ResDat.class ; s_h+height; proc print; run; data b (keep=name height s_h); set fdata.class ; s_h=sum(s_h, height, 0); retain s_h 0; run; 上面两段程序等价,Obs Name Height s_h 1 Alice 56.5 56.5 2 Barbara 65.3 121.8 3 Carol 62.8 184.6 4 Jane 59.8 244.4 5 Janet 62.5 306.9 6 Joyce 51.3 358.2 7 Judy 64.3 422.5 8 Louise 56.3 478.8 9 Mary 66.5 545.3 ,应用举例,例7.5 表达式SUMX+X*X把X*X的结果加到SUMX上 data a (keep=date uss); set ResDat. Dret(where =(stkcd=000002); uss+ Dret*2; /*USS为变量Dret的平方和 */ run; 例7.6 计算非缺失值的观测个数 data a(keep=nmis); set ResDat.indcls; nmis+sector= ; run; 例中,NMIS为变量SECTOR非缺失值的观测个数,即按SECTOR分好类股票的个数。,DELETE语句,DELETE语句停止处理当前观测,该观测值不被读入到创建的数据集,SAS系统返回到DATA步的开头处理其他观测。 语句格式: DELETE;,例7.7 删除部分观测值 data stka; set ResDat.lstkinfo; if Stktype=B then delete; run; 例中,删除数据集RESDAT中Stktype=B的观测值。,例7.8 清空数据集 data a; set ResDat.lstkinfo; delete; run; 例中,删除数据集A中的所有观测值,即清空数据集A。设计复杂程序时,常会用到DELETE语句的这种用法。,LOSTCARD语句,LOSTCARD语句用于重新对准输入数据。 当一个观测包含几个数据行,且当前观测缺少其中的一些行时,利用LOSTCARD语句可以防止SAS系统从下一个观测的数据行读数据作为当前观测的一部分。 语句格式 LOSTCARD; 使用LOSTCARD语句时,必须用IF-THEN语句给出丢失数据行的条件。 适合使用LOSTCARD语句的情况有: 每个观测有固定的输入数据行; 同一个观测的每个数据行都有一个同值的识别变量。,例7.9 每个数据行都有一个同值的识别变量 data a; input id 1-3 reject #2 idc 1-3 pass; if id ne idc then do; put 数据行错误 id= idc=; lostcard; end; cards; 301 32 301 61432 302 53 302 83171 400 92845 411 46 411 99551 ; proc print; title2 每个观测包含2个数据行; run;,每个观测包含两个数据行 Obs id reject idc pass 1 301 32 301 61432 2 302 53 302 83171 3 411 46 411 99551,LOSTCARD语句的执行步骤:,SAS日志上输出一个丢失记录卡信息,一条标尺及创建当前观测所读的数据行; 不输出观测到数据集,丢弃开始读入本组的数据行,返回到DATA步开头; 试图用该组第二个数据行开始并按INPUT语句规定的行数读数据行来创建观测; 当丢失记录行的IF条件仍是真的,SAS重复前三步; 对于IF条件不成立的一组数据行,SAS创建一个观测,并增加自动变量_N_的值。,例7.10 每个观测包含3个数据行 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 103 C 103 C 104 D 105 E 105 E 105 E ; proc print; title 每个观测包含3个数据行; 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-+-7-+-8-+-9-+-0 5 101 A 6 102 B 7 102 B NOTE: 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 个变量。,STOP语句,STOP语句停止处理DATA步。当遇到STOP语句时,正被处理的那个观测没有添加到SAS数据集上。 语句格式: STOP;,例7.11 停止处理DATA步 data a; set resdat.lstkinfo; if _n_=5 then stop; proc print; /*OUTPUT窗口照常打印数据集列表 */ run; 例中,数据集A从数据集resdat.lstkinfo中读取了4条观测,因为当指针标识_N_=5时,遇到STOP语句,正被处理的那条观测没有添加到数据集A中。,ABORT语句,ABORT语句中止执行当前的DATA步,继续执行下一个DATA或PROC步。 执行ABORT语句时,创建ABORT语句执行前已处理观测的数据集。但是,当新创建数据集和已存在的SAS数据集同名时,不能覆盖已存在的数据集。 语句格式 : ABORT|;,RETURN选项说明,立即使当前的SAS作业或会话正常结束。产生的结果依赖于执行的方式。 批处理方式和非交互方式下: 立即停止处理; 在LOG窗口显示错误信息,说明由ABORT语句的RETURN选项终程序执行; 不执行任何相继的语句或检查句法; 用一个条件码指示有错误地控制返回到主机系统。 显示管理方式和交互行方式下: 立即停止处理并返回到主机系统。,例7.12 显示管理方式下使用stop语句与abort的区别。 使用stop语句时,LOG窗口不显示错误信息,当新创建数据集和已存在的SAS数据集同名时,能覆盖已存在的数据集。 data a; set resdat.lstkinfo; if _n_=5 then stop; run; Log窗口显示:,使用abort语句时,LOG窗口显示错误信息,当新创建数据集和已存在的SAS数据集同名时,不能覆盖已存在的数据集。 data a; set resdat.lstkinfo; if _n_=5 then abort; run; Log窗口显示:,例7.13 ABORT语句防止输入无效数据时出错。 data b; input ssn pay ; if _error_ then abort; cards; 111 100 aaa 200 444 300 ; proc print; run; 输出结果:,WHERE语句的性质,WHERE语句读入数据集之前选择观测。 WHERE语句是在执行数据集连接(SET),合并(MERGE),更新(UPDATE)或修改(MODIFY)之前进行的操作。 使用WHERE语句时,因为SAS系统只从输入数据集中读入满足条件的观测,所以这样的SAS程序更有效。 WHERE语句不是可执行语句,它起不到IF-THEN语句的作用。 能用WHERE语句的地方一定可以用IF语句来代替,反之则不行。不过,一旦WHERE语句有效,就一定要用它,因为这样的程序效率高。,语句格式 WHERE where-expression; 仅用于WHERE表达式的特殊算符,例7.15 BETWEEN-AND算符和IS MISSING|IS NULL算符例句。 Where hstocd between 600000 and 600899; Where taxes between salary*0.30 and salary*0.50; Where taxes not between salary*0.30 and salary*0.50; Where idnum is missing; /*计算缺失值数目 */ Where name is null; LIKE算符的两个特殊模式: 百分号(%)可以替代任意多个字符; 下划线(_)正好有一个字符与之匹配。 进行比较时,LIKE算符识别大写和小写之间的字符。,例7.16 设有名字Diana,Diane, Dianna, Dianthus,Dyan. 使用LIKE算符来选择第一个字符为D的名字时,LIKE算符的不同选择模式与结果如下 : Like D_an; /* 选择Dyan */ Like D_an_; /* 没有名子被选上 */ Like D_an_; /* Diana, Diane, Dianna, Dyan */ Like D_an%; /*上述列表的所有名字 */ Not like D_an%; /* 没有名子被选上 */,SAMEAND算符的形式: WHERE candition-1; 其它SAS语句 WHERE SAME AND condition -2 其它SAS语句 WEHERE SAME AND condition-n; SAS系统选择除满足上述定义的条件外,还满足在SAME-AND算符后列出条件的观测。,例7.17 使用算符SAME-AND来增加较多的从句到程序中已有的WHERE语句后面,而不需要重新打入原来的从句 proc gplot data=ResDat.Idx000001; plot clpr*date=1; where year(date)1996; where same and year(date)2000; run; quit;,应用举例,例7.18 选择数值变量非0和非缺失的观测值 Where x; Where x and y; Where x/y; 例7.19 选择字符变量非缺失的观测 Where c= ; where c is not missing; 字符变量C不能单独地作为逻辑表达式 例7.20 选择一定范围内的观测 Where x between 1 and 5; where 1=x=5;,例7.22 不能用WHERE语句的情况 data a; set ResDat.Idx000001; where _n_100; /*错误语句,必须用if */ run; data a; set ResDat.Idx000001; if _n_100; run; 例中,不能用WHERE语句控制SAS的自动变量。,OUTPUT语句,OUTPUT语句输出当前的观测到被创建的数据集中。 语句格式 OUTPUT ; 选项说明: OUTPUT语句的作用: 由一个输入数据行创建多个观测; 由一个输入数据文件创建多个SAS数据集; 由几个输入数据行合并为一个观测。,应用举例,例7.23 由一个输入数据行创建多个观测 data A; input ID $ score1- score3; drop score1- score3; score=score1; output; score=score2; output; score=score3; output; cards; 02126 99 96 94 02128 89 90 88 ; proc print; run; 例中,每一行记录生成三个观测。每个新观测将包括代号ID和一次测验值SCORE.,例7.24 一个DATA步创建多个数据集 data A B; set ResDat.lstkinfo; if Stktype=A then output Astk; else if Stktype=B then output bstk; run; 例中,一个DATA步创建两个数据集。数据集Astk包含变量Stktype=A的所有观测;数据集Bstk包含变量Stktype=B的所有观测。,例7.26 由几个记录组合信息 proc sort data=ResDat.lstkinfo out=lstkinfo; by stktype; data a; set lstkinfo ; by stktype; if first. Stktype then Num=0; Num+1; keep stktype num ; if last.stktype then output; run; 例中,计算数据集lstkinfo中两类不同股票的数目。这样的方法是不是简单快捷。这个例子很有用,从这里也认识了自动变量:first. stktype 和last. stktype的使用方法。数据处理时用这个语句会很省力。,MISSING语句,MISSING语句规定缺失值的符号。 读入含有缺失值的数据源时,必须用MISSING语句,否则可能产生读入错误。 语句格式 Missing charcter1charctern; 其中: charcter规定代表缺失值的字符。,应用举例,例7.29 规定缺失值字符 data period_a; missing X I; input Id $4. Foodpr1 Foodpr2 Foodpr3 Coffeem1 Coffeem2; datalines; 1001 115 45 65 I 78 1002 86 27 55 72 86 1004 93 52 X 76 88 1015 73 35 43 112 108 1027 101 127 39 76 79 ; 例中,MISSING语句规定用字符X和I表示缺失值。如果不用MISSING语句,当读入数值变量的缺失值时(这里为X和I),就要产生错误。,Id Foodpr1 Foodpr2 Foodpr3 Coffeem1 Coffeem2 1001 115 45 65 I 78 1002 86 27 55 72 86 1004 93 52 X 76 88 1015 73 35 43 112 108 1027 101 127 39 76 79,其它语句,本节介绍语句LIST, CALL, NULL和ERROR.,LIST语句,LIST语句在SAS日志窗口上列出正被加工处理观测的输入数据行。 LIST语句被执行时,在列出的第一行记录之前,显示一条指示列数的标尺。 语句格式 LIST;,例7.30 用INPUT语句读入可疑数据行时使用LIST语句 data a; input x y; if x0 then list; cards; 2 6 4 2 -1 2 -4 6 ; run;,290 data a; 291 input x y; 292 if x0 then list; 293 cards; RULE: -+-1-+-2-+-3-+-4-+-5-+-6- 296 -1 2 297 -4 6 NOTE: 数据集 WORK.A 有 4 个观测和 2 个变量。 NOTE: “DATA 语句”所用时间(总处理时间): 实际时间 0.00 秒 CPU 时间 0.00 秒 298 ; 299 run;,LOG显示结果,CALL语句,CALL语句用于调用子程序。 语句格式: Call routine (parameter-1); 选项说明:,例7.32 创建包含DATA信息的宏变量 data a; call symput (text1, march); /*将march赋给宏变量text1 */ call
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高炮除锈喷漆施工合同(3篇)
- 高新技术企业担保协议
- 高校学生实习安全责任书及安全教育培训协议
- 服务业员工工伤赔偿及应急预案合作协议
- 店面线上线下融合营销劳务协议
- 旅游资源招投标保密协议与旅游资源信息安全合同
- 2025管理学基础试题及答案
- 软件开发企业股东合作协议范本
- 2025公务员选调面试题及答案
- 出租车公司车辆租赁与环保责任合同
- 办公楼物业服务技术方案
- 《中国古代建筑》课件
- 小学教学常规管理制度汇编
- 假期安全提醒小学
- 村委会收养关系证明
- 物流运输市场调研报告
- 初中生学习的最佳策略
- 全科助理医生培训
- 医疗机构中药制剂临床前药效学与安全性研究技术指南
- 拆除工程施工安全培训
- 岐黄天使中医西学中专项128学时试题答案
评论
0/150
提交评论