SAS数据步修改与选择观测课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《SAS数据步修改与选择观测课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SAS 数据 修改 选择 观测 课件
- 资源描述:
-
1、第第7章数据步修改与选择观测章数据步修改与选择观测清华大学经管学院清华大学经管学院 朱世武朱世武本章介绍数据步中用于修改与选择观测的语句。利用修改与选择观测语句,可以进行数值计算、数据集修改、观测子集选择及输出控制等。赋值语句赋值语句 语句格式: variable=expression;将表达式结果赋予一个变量。 选项说明: variable规定变量名或数组元素expression有效的SAS表达式例7.1 赋值语句举例 data a;set ResDat.class;by sex;n=_N_; error=_error_; first_s=first.sex; last_s=last.sex
2、; 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
3、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 结果变量类型结果变量类型 决定结果变量类型的准则: 如果表达式中的变量全为数值型,结果变量为数值型; 如果表达式中的变量全为字符型,结果变量为字符
4、型; 如果表达式中的变量既有数值又有字符型,结果变量为数值型。结果变量长度结果变量长度 结果变量的长度是第一次扫描结果的长度,除非事先由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的长度为
5、12 */lstknm=深发展; lstknm =大秦铁路; proc print;run;Obs lstknm-1 大秦铁路累加语句累加语句 语句格式: Variable+expression;累加语句累加表达式结果。 选项说明: variable规定累加变量expression有效的SAS表达式应用准则: 累加变量的观测被读入之前,值为0; 表达式的计算结果为缺失值时,取0代替; 表达式可以使用比较算符; 语句A+(-B)中的(+)是必须的,不能写成A-B。 例7.4 累加语句等于使用SUM函数和一个RETAIN语句data a (keep=name height s_h);set Res
6、Dat.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_h1 Alice 56.5 56.52 Barbara 65.3 121.83 Carol 62.8 184.64 Jane 59.8 244.45 Janet 62.5 306.96 Joyce 51.3 358.27 Judy 64.3 422.58 Louise 56.3 478.89
7、 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语句停止处理当前观测,该观测值
8、不被读入到创建的数据集,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语句用于重新对准输入数据。当一个观测包含几个数据行,且当前观
9、测缺少其中的一些行时,利用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 32301 614
10、32302 53302 83171400 92845411 46411 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 99551LOSTCARD语句的执行步骤:语句的执行步骤: SAS日志上输出一个丢失记录卡信息,一条标尺及创建当前观测所读的数据行; 不输出观测到数据集,丢弃开始读入本组的数据行,返回到DATA步开头; 试图用该组第二个数据行开始并按INPUT语句规定的行数读数据行来创建观
11、测; 当丢失记录行的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 A102 B102 B103 C103 C103 C104 D105 E105 E105 E;proc print;title 每个观测包含3个数据行;run; 每个观测包含3个数据行 Obs id1 x id2 y id3 z1 1
12、03 C 103 C 103 C2 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-+-05 101 A6 102 B7 102 BNOTE: LOST CARD.8 103 CNOTE: LOST CARD.9 103 CNOTE: LOST CARD.11 104 D12 105 E13 105 ENOTE: 数据集
13、 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步,继
14、续执行下一个DATA或PROC步。执行ABORT语句时,创建ABORT语句执行前已处理观测的数据集。但是,当新创建数据集和已存在的SAS数据集同名时,不能覆盖已存在的数据集。 语句格式 :ABORT|; RETURN选项说明选项说明 立即使当前的SAS作业或会话正常结束。产生的结果依赖于执行的方式。批处理方式和非交互方式下: 立即停止处理; 在LOG窗口显示错误信息,说明由ABORT语句的RETURN选项终程序执行; 不执行任何相继的语句或检查句法; 用一个条件码指示有错误地控制返回到主机系统。 显示管理方式和交互行方式下: 立即停止处理并返回到主机系统。 例7.12 显示管理方式下使用sto
15、p语句与abort的区别。使用stop语句时,LOG窗口不显示错误信息,当新创建数据集和已存在的SAS数据集同名时,能覆盖已存在的数据集。data a;set resdat.lstkinfo;if _n_=5 then stop;run;Log窗口显示:NOTE: 从数据集 RESDAT.LSTKINFO 读取了 5 个观测。NOTE: 数据集 WORK.A 有 4 个观测和 12 个变量。NOTE: “DATA 语句”所用时间(总处理时间): 实际时间 0.35 秒 CPU 时间 0.01 秒使用abort语句时,LOG窗口显示错误信息,当新创建数据集和已存在的SAS数据集同名时,不能覆盖已
16、存在的数据集。data a;set resdat.lstkinfo;if _n_=5 then abort;run;Log窗口显示:ERROR: ABORT 语句在行 51 列 15 终止了执行。Stkcd=000007 Lstknm=深达声A Lstdt=1992-04-13NOTE: SAS 系统由于错误而停止了该步的处理。NOTE: 从数据集 RESDAT.LSTKINFO 读取了 5 个观测。WARNING: 数据集 WORK.A 可能不完整。该步停止时,共有 4 个观测和 12 个变量。WARNING: 数据集 WORK.A 由于该步已停止,而没有被替换。NOTE: “DATA 语句
17、”所用时间(总处理时间): 实际时间 0.01 秒 CPU 时间 0.02 秒例7.13 ABORT语句防止输入无效数据时出错。data b;input ssn pay ;if _error_ then abort;cards;111 100aaa 200444 300;proc print;run; 输出结果:Obs ssn pay 1 111 100 WHERE语句的性质语句的性质 WHERE语句读入数据集之前选择观测。WHERE语句是在执行数据集连接(SET),合并(MERGE),更新(UPDATE)或修改(MODIFY)之前进行的操作。使用WHERE语句时,因为SAS系统只从输入数据集
18、中读入满足条件的观测,所以这样的SAS程序更有效。WHERE语句不是可执行语句,它起不到IF-THEN语句的作用。能用WHERE语句的地方一定可以用IF语句来代替,反之则不行。不过,一旦WHERE语句有效,就一定要用它,因为这样的程序效率高。 语句格式语句格式WHERE where-expression;仅用于WHERE表达式的特殊算符 算符说明Between-And选择一定数值范围内的观测Is Missing|Is Null选择变量值为缺失值的所有观测Contains|?选择包含在规定字符串的观测Like匹配选择观测Same-And增加多个从句例7.15 BETWEEN-AND算符和IS M
19、ISSING|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 设有名
20、字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其它S
21、AS语句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; Wher
22、e 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的自动变量。的自动变
23、量。OUTPUT语句语句 OUTPUT语句输出当前的观测到被创建的数据集中。 语句格式语句格式OUTPUT ; 选项说明: OUTPUT语句的作用:由一个输入数据行创建多个观测;由一个输入数据文件创建多个SAS数据集;由几个输入数据行合并为一个观测。 没有选项将当前观测输出到DATA语句中命名的所有数据集中data-set-name规定输出当前观测的数据集应用举例应用举例 例7.23 由一个输入数据行创建多个观测 data A;input ID $ score1- score3;drop score1- score3;score=score1; output;score=score2; out
24、put;score=score3; output;cards;02126 99 96 9402128 89 90 88;proc print;run;例中,每一行记录生成三个观测。每个新观测将包括代号ID和一次测验值SCORE. Obs ID score1 02126 992 02126 963 02126 944 02128 895 02128 906 02128 88例7.24 一个DATA步创建多个数据集 data A B;set ResDat.lstkinfo;if Stktype=A then output Astk;else if Stktype=B then output bst
25、k;run;例中,一个DATA步创建两个数据集。数据集Astk包含变量Stktype=A的所有观测;数据集Bstk包含变量Stktype=B的所有观测。例例7.27.26 6 由几个记录组合信息 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中两类不同股票的数目。这样的
展开阅读全文