




已阅读5页,还剩84页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章数据步修改与选择观测,清华大学经管学院朱世武ZhushwResdat样本数据:SAS论坛:,本章介绍数据步中用于修改与选择观测的语句。利用修改与选择观测语句,可以进行数值计算、数据集修改、观测子集选择及输出控制等。,赋值语句,语句格式:variable=expression;将表达式结果赋予一个变量。选项说明:,例7.1赋值语句举例dataa;setResDat.class;bysex;n=_N_;error=_error_;first_s=first.sex;last_s=last.sex;procprint;run;x=a+b;/*规定新变量x,它是a和b的和*/t(2)=sum(ofx1-x5);/*规定数组元素,它的值是一函数值*/a=a+b;/*规定一个已经存在的变量a,它的值为原来值和b之和*/,结果显示:,ObsNameSexAgeHeightWeightnerrorfirst_slast_s1AliceF1356.584.010102BarbaraF1365.398.020003CarolF1462.8102.530004JaneF1259.884.540005JanetF1562.5112.550006JoyceF1151.350.560007JudyF1464.390.070008LouiseF1256.377.080009MaryF1566.5112.0900110AlfredM1469.0112.51001011HenryM1463.5102.511000,结果变量类型,决定结果变量类型的准则:如果表达式中的变量全为数值型,结果变量为数值型;如果表达式中的变量全为字符型,结果变量为字符型;如果表达式中的变量既有数值又有字符型,结果变量为数值型。,结果变量长度,结果变量的长度是第一次扫描结果的长度,除非事先由LENGTH语句规定好结果变量的长度。例7.2第一扫描结果的长度不是所有数据中的最大长度时会出错dataa;lstknm=深发展;/*第一扫描结果的长度为4*/lstknm=大秦铁路;/*lstknm的长度为4,所以显示结果为lstknm=大秦铁*/procprint;run;,Obslstknm-1大秦铁,例7.3用LENGTH语句得到正确输出结果dataa;lengthlstknm$12;/*规定变量lstknm的长度为12*/lstknm=深发展;lstknm=大秦铁路;procprint;run;,Obslstknm-1大秦铁路,累加语句,语句格式:Variable+expression;累加语句累加表达式结果。选项说明:,应用准则:累加变量的观测被读入之前,值为0;表达式的计算结果为缺失值时,取0代替;表达式可以使用比较算符;语句A+(-B)中的(+)是必须的,不能写成A-B。,例7.4累加语句等于使用SUM函数和一个RETAIN语句dataa(keep=nameheights_h);setResDat.class;s_h+height;procprint;run;datab(keep=nameheights_h);setfdata.class;s_h=sum(s_h,height,0);retains_h0;run;上面两段程序等价,ObsNameHeights_h1Alice56.556.52Barbara65.3121.83Carol62.8184.64Jane59.8244.45Janet62.5306.96Joyce51.3358.27Judy64.3422.58Louise56.3478.89Mary66.5545.3,应用举例,例7.5表达式SUMX+X*X把X*X的结果加到SUMX上dataa(keep=dateuss);setResDat.Dret(where=(stkcd=000002);uss+Dret*2;/*USS为变量Dret的平方和*/run;例7.6计算非缺失值的观测个数dataa(keep=nmis);setResDat.indcls;nmis+sector=;run;例中,NMIS为变量SECTOR非缺失值的观测个数,即按SECTOR分好类股票的个数。,DELETE语句,DELETE语句停止处理当前观测,该观测值不被读入到创建的数据集,SAS系统返回到DATA步的开头处理其他观测。语句格式:DELETE;,例7.7删除部分观测值datastka;setResDat.lstkinfo;ifStktype=Bthendelete;run;例中,删除数据集RESDAT中Stktype=B的观测值。,例7.8清空数据集dataa;setResDat.lstkinfo;delete;run;例中,删除数据集A中的所有观测值,即清空数据集A。设计复杂程序时,常会用到DELETE语句的这种用法。,LOSTCARD语句,LOSTCARD语句用于重新对准输入数据。当一个观测包含几个数据行,且当前观测缺少其中的一些行时,利用LOSTCARD语句可以防止SAS系统从下一个观测的数据行读数据作为当前观测的一部分。语句格式LOSTCARD;使用LOSTCARD语句时,必须用IF-THEN语句给出丢失数据行的条件。适合使用LOSTCARD语句的情况有:每个观测有固定的输入数据行;同一个观测的每个数据行都有一个同值的识别变量。,例7.9每个数据行都有一个同值的识别变量dataa;inputid1-3reject#2idc1-3pass;ifidneidcthendo;put数据行错误id=idc=;lostcard;end;cards;30132301614323025330283171400928454114641199551;procprint;title2每个观测包含2个数据行;run;,每个观测包含两个数据行Obsidrejectidcpass130132301614322302533028317134114641199551,LOSTCARD语句的执行步骤:,SAS日志上输出一个丢失记录卡信息,一条标尺及创建当前观测所读的数据行;不输出观测到数据集,丢弃开始读入本组的数据行,返回到DATA步开头;试图用该组第二个数据行开始并按INPUT语句规定的行数读数据行来创建观测;当丢失记录行的IF条件仍是真的,SAS重复前三步;对于IF条件不成立的一组数据行,SAS创建一个观测,并增加自动变量_N_的值。,例7.10每个观测包含3个数据行dataa;inputid1x$#2id2y$#3id3z$;ifid1neid2orid2neid3thenlostcard;cards;101A102B102B103C103C103C104D105E105E105E;procprint;title每个观测包含3个数据行;run;,每个观测包含3个数据行Obsid1xid2yid3z1103C103C103C2105E105E105E,例中,DATA步读3个数据行作为1个观测。第1个观测有2个丢失记录,第2个观测有1个丢失记录,第4个观测丢失2个记录。只有第3和第5个观测是完整的观测。LOG窗口显示的信息:NOTE:LOSTCARD.RULE:-+-1-+-2-+-3-+-4-+-5-+-6-+-7-+-8-+-9-+-05101A6102B7102BNOTE:LOSTCARD.8103CNOTE:LOSTCARD.9103CNOTE:LOSTCARD.11104D12105E13105ENOTE:数据集WORK.A有2个观测和6个变量。,STOP语句,STOP语句停止处理DATA步。当遇到STOP语句时,正被处理的那个观测没有添加到SAS数据集上。语句格式:STOP;,例7.11停止处理DATA步dataa;setresdat.lstkinfo;if_n_=5thenstop;procprint;/*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数据集同名时,能覆盖已存在的数据集。dataa;setresdat.lstkinfo;if_n_=5thenstop;run;Log窗口显示:,使用abort语句时,LOG窗口显示错误信息,当新创建数据集和已存在的SAS数据集同名时,不能覆盖已存在的数据集。dataa;setresdat.lstkinfo;if_n_=5thenabort;run;Log窗口显示:,例7.13ABORT语句防止输入无效数据时出错。datab;inputssnpay;if_error_thenabort;cards;111100aaa200444300;procprint;run;输出结果:,WHERE语句的性质,WHERE语句读入数据集之前选择观测。WHERE语句是在执行数据集连接(SET),合并(MERGE),更新(UPDATE)或修改(MODIFY)之前进行的操作。使用WHERE语句时,因为SAS系统只从输入数据集中读入满足条件的观测,所以这样的SAS程序更有效。WHERE语句不是可执行语句,它起不到IF-THEN语句的作用。能用WHERE语句的地方一定可以用IF语句来代替,反之则不行。不过,一旦WHERE语句有效,就一定要用它,因为这样的程序效率高。,语句格式WHEREwhere-expression;仅用于WHERE表达式的特殊算符,例7.15BETWEEN-AND算符和ISMISSING|ISNULL算符例句。Wherehstocdbetween600000and600899;Wheretaxesbetweensalary*0.30andsalary*0.50;Wheretaxesnotbetweensalary*0.30andsalary*0.50;Whereidnumismissing;/*计算缺失值数目*/Wherenameisnull;LIKE算符的两个特殊模式:百分号(%)可以替代任意多个字符;下划线(_)正好有一个字符与之匹配。进行比较时,LIKE算符识别大写和小写之间的字符。,例7.16设有名字Diana,Diane,Dianna,Dianthus,Dyan.使用LIKE算符来选择第一个字符为D的名字时,LIKE算符的不同选择模式与结果如下:LikeD_an;/*选择Dyan*/LikeD_an_;/*没有名子被选上*/LikeD_an_;/*Diana,Diane,Dianna,Dyan*/LikeD_an%;/*上述列表的所有名字*/NotlikeD_an%;/*没有名子被选上*/,SAMEAND算符的形式:WHEREcandition-1;其它SAS语句WHERESAMEANDcondition-2其它SAS语句WEHERESAMEANDcondition-n;SAS系统选择除满足上述定义的条件外,还满足在SAME-AND算符后列出条件的观测。,例7.17使用算符SAME-AND来增加较多的从句到程序中已有的WHERE语句后面,而不需要重新打入原来的从句procgplotdata=ResDat.Idx000001;plotclpr*date=1;whereyear(date)1996;wheresameandyear(date)2000;run;quit;,应用举例,例7.18选择数值变量非0和非缺失的观测值Wherex;Wherexandy;Wherex/y;例7.19选择字符变量非缺失的观测Wherec=;wherecisnotmissing;字符变量C不能单独地作为逻辑表达式例7.20选择一定范围内的观测Wherexbetween1and5;where1=x=5;,例7.22不能用WHERE语句的情况dataa;setResDat.Idx000001;where_n_100;/*错误语句,必须用if*/run;dataa;setResDat.Idx000001;if_n_100;run;例中,不能用WHERE语句控制SAS的自动变量。,OUTPUT语句,OUTPUT语句输出当前的观测到被创建的数据集中。语句格式OUTPUT;选项说明:OUTPUT语句的作用:由一个输入数据行创建多个观测;由一个输入数据文件创建多个SAS数据集;由几个输入数据行合并为一个观测。,应用举例,例7.23由一个输入数据行创建多个观测dataA;inputID$score1-score3;dropscore1-score3;score=score1;output;score=score2;output;score=score3;output;cards;0212699969402128899088;procprint;run;例中,每一行记录生成三个观测。每个新观测将包括代号ID和一次测验值SCORE.,例7.24一个DATA步创建多个数据集dataAB;setResDat.lstkinfo;ifStktype=AthenoutputAstk;elseifStktype=Bthenoutputbstk;run;例中,一个DATA步创建两个数据集。数据集Astk包含变量Stktype=A的所有观测;数据集Bstk包含变量Stktype=B的所有观测。,例7.26由几个记录组合信息procsortdata=ResDat.lstkinfoout=lstkinfo;bystktype;dataa;setlstkinfo;bystktype;iffirst.StktypethenNum=0;Num+1;keepstktypenum;iflast.stktypethenoutput;run;例中,计算数据集lstkinfo中两类不同股票的数目。这样的方法是不是简单快捷。这个例子很有用,从这里也认识了自动变量:first.stktype和last.stktype的使用方法。数据处理时用这个语句会很省力。,MISSING语句,MISSING语句规定缺失值的符号。读入含有缺失值的数据源时,必须用MISSING语句,否则可能产生读入错误。语句格式Missingcharcter1charctern;其中:charcter规定代表缺失值的字符。,应用举例,例7.29规定缺失值字符dataperiod_a;missingXI;inputId$4.Foodpr1Foodpr2Foodpr3Coffeem1Coffeem2;datalines;10011154565I781002862755728610049352X768810157335431121081027101127397679;例中,MISSING语句规定用字符X和I表示缺失值。如果不用MISSING语句,当读入数值变量的缺失值时(这里为X和I),就要产生错误。,IdFoodpr1Foodpr2Foodpr3Coffeem1Coffeem210011154565I781002862755728610049352X768810157335431121081027101127397679,其它语句,本节介绍语句LIST,CALL,NULL和ERROR.,LIST语句,LIST语句在SAS日志窗口上列出正被加工处理观测的输入数据行。LIST语句被执行时,在列出的第一行记录之前,显示一条指示列数的标尺。语句格式LIST;,例7.30用INPUT语句读入可疑数据行时使用LIST语句dataa;inputxy;ifx;PROCSORT中必须使用BY语句,BY语句中可以规定任意多个变量。BY语句中规定多个变量时,SORT过程首先按第一个变量排序,然后是第二个变量等。BY语句中可以规定的选项:DESCENDING对变量按下降次序排序。,应用举例,例15.1按多变量排序。dataa;setResDat.Idx000001;year=year(date);qtr=qtr(date);month=month(date);procsortdata=aout=b;byyearqtrmonth;run;例中,对上证数据Idx000001按年、季和月排序。,例15.2按单变量降序排列。procsortdata=ResDat.a600001out=a;bydescendingclpr;procprintdata=a(obs=3)noobs;vardateclpr;run;例中,按收盘价CLPR的降序排列。,数据集转置,转置就是把数据集的观测变为变量,变量变为观测。利用SAS的转置过程可以对数据集进行转置。,转置过程句法,PROCTRANSPOSE;BYvariable-1variable-n;COPYvariable(s);IDvariable;IDLABELvariable;VARvariable(s);,语句说明:,PROCTRANSPOSE语句,PROCTRANSPOSE;选项说明:,VAR语句和ID语句,VAR语句VARvariable-list;VAR语句列出要转置的变量。没有VAR语句时,则没有列在其它语句里的所有数值变量被转置。,ID语句IDvariable;ID语句规定输入数据集中一个变量。ID变量的值为转置后数据集的变量名。在没有选项LET时,ID变量的值在数据集中只能出现一次,使用BY语句,BY组内只包含最后的ID值。,应用举例,例15.4ID变量的值为转置后数据集的变量名。proctransposedata=ResDat.classout=alet;idname;procprint;run;例中,原数据集CLASS中变量NAME的值为转置后数据集A的变量名,对所有数值变量转置。数据集A中还有一变量_NAME_.,SAS系统12007年03月07日星期五下午09时21分17秒Obs_NAME_AliceBarbaraCarolJaneJanetJoyceJudyLouiseMaryAlfred1Age13.013.014.012.015.011.014.012.015.014.02Height56.565.362.859.862.551.364.356.366.569.03Weight84.098.0102.584.5112.550.590.077.0112.0112.5ObsHenryJamesJeffreyJohnPhilipRobertRonaldThomasWilliam114.012.013.012.01612.01511.015.0263.557.362.559.07264.86757.566.53102.583.084.099.5150128.013385.0112.0,例15.5BY组内最后一个ID值的观测被转置。proctransposedata=ResDat.classout=alet;idsex;procprint;run;结果显示:,proctransposedata=ResDat.classout=alet;idsex;bysex;procprint;run;结果显示:,例15.8对每个BY组转置。optionsnodatepageno=1linesize=80pagesize=40;proctransposedata=ResDat.fishdataout=fishlength(rename=(col1=Measurement);varlength1-length4;bylocationdate;run;procprintdata=fishlengthnoobs;titleFishLengthDataforEachLocationandDate;run;,FishLengthDataforEachLocationandDate1LocationDate_NAME_MeasurementColePond02JUN95Length131ColePond02JUN95Length232ColePond02JUN95Length332ColePond02JUN95Length433ColePond03JUL95Length133ColePond03JUL95Length234ColePond03JUL95Length337ColePond03JUL95Length432ColePond04AUG95Length129,输出窗口显示,例15.10对转置后的数据集作统计分析。,optionsnodatepageno=1linesize=80pagesize=40;datasplit;setResDat.weights;arrays7s1-s7;subject+1;doTime=1to7;strength=stime;output;end;drops1-s7;run;procprintdata=split(obs=15)noobs;titleSplitDataSet;title2First15ObservationsOnly;run;,/*接左侧*/proctransposedata=splitout=totsplitprefix=Str;byprogramsubject;copytimestrength;varstrength;run;procprintdata=totsplit(obs=15)noobs;titleTotsplitDataSet;title2First15ObservationsOnly;run;,改变输出地点,缺省情况下,SAS过程输出到OUTPUT窗口,SAS日志输出到LOG窗口。利用SAS的PRINTTO过程可以设定SAS过程和日志的输出地点。PRINTTO过程有以下功能:改变过程输出的目的地;改变SAS日志输出的目的地;有选择地限制SAS输出;将输出结果存放在永久文件中;将输出直接送到打印机上;将SAS的输出作为输入数据(这时需要一些附加的程序语句)。,PRINTTO过程句法,PROCPRINTTO;选项说明注意:一般情况下,PROCPRINTTO后面一定要加RUN语句。若省略RUN语句,则会丢失PRINTTO后面DATA步或PROC步第一行的输出。,应用举例,例15.11将SAS日志输出到外部永久文件。procprinttolog=d:log.dat;/*直接输出到永久文件中*/filenamef1d:out.txt;procprinttolog=f1;/*输出到文件标记*/例15.12将运行结果输出到外部永久文件。filen
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年 第十一章 实验十二 传感器的简单使用说课稿 鲁科版选修3-2
- 传感器的基本误差和精度说课稿-2025-2026学年中职专业课-传感器检测技术-电气设备运行与控制-装备制造大类
- 专项法律委托代理服务合同8篇
- 2025劳动合同法律知识库
- 2025德坤劳动合同(普通劳务工)
- 益阳事业单位笔试真题2025
- 渐变工具和油漆桶工具说课稿-2025-2026学年中职专业课-图形图像处理-计算机类-电子与信息大类
- 2025股权质押借款合同范本
- 八年级生物上册 16.3《动物行为的研究》说课稿 (新版)北师大版
- 乌兰察布事业单位笔试真题2025
- 村书记考试试题及答案
- 《库存优化模型》课件
- 幼儿园办公家具教学家具采购招标文件
- 医疗AI发展中的伦理问题及应对策略
- 植入式给药装置护理技术(输液港护理团标) 课件
- 2023-2024部编人教版5五年级语文上册电子课本课件【全册】
- 抓草机管理制度
- 选煤厂安全知识培训课件
- 支部三会一课记录范文
- 2025《导游业务》高分必会试题库1000题-选择600题
- 道路工程检验批划分
评论
0/150
提交评论