SAS系统数据管理

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第15章数据管理清华大学经管学院朱世武Zhushw@sem.tsinghua.edu.cnResdat样本数据:论坛:系统提供的过程按其用途可分为四大类:数据管理;基础统计;数据呈现;数据访问。和任何一种编程语言一样,SAS系统有一些数据管理过程,用于实现常用的中间操作或数据转换。本章将介绍的数据管理过程:数据集排序;数据集转置;改变输出地点;添加观测;数据库复制。数据集排序利用SAS的排序过程可以对数据集中的观测重新排序。SAS许多和BY配合使用的语句,如对数据集进行合并的语句或更新语句等,使用前必须先对BY变量进行排序。排序过程句法PROCSORToption(s)collating-sequence-option;BYDESCENDINGvariable-1...DESCENDINGvariable-n;PROCSORT语句PROCSORToption-listcollating-sequence-option;选项说明:DATA=规定被排序数据集,缺省时为最新创建数据集OUT=创建输出数据集,省略时用排序后数据集替换原数据集ASCII规定按ASCII排序SWEDISH规定按Swedish排序NATIONAL规定按习惯排序FORCE强行实施多余排序其中:选项FORCE强行实施多余排序。排序并替换原来加索引的或取子集的数据集,即没有规定OUT=选项时,如果没有规定FORCE,就不能对有索引的数据集进行排序和替换。没有规定OUT=选项时必须使用FORCE的选项有:OBS=系统选项;FIRSTOBS=系统选项;DATA=数据集中的数据集选项WHERS=;PROCSORT步用WHERE语句。BY语句BYDESCENDINGvariable-1…DESCENDINGvariable-n;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的转置过程可以对数据集进行转置。转置过程句法PROCTRANSPOSEDATA=input-data-setLABEL=labelLETNAME=nameOUT=output-data-setPREFIX=prefix;BYDESCENDINGvariable-1...DESCENDINGvariable-nNOTSORTED;COPYvariable(s);IDvariable;IDLABELvariable;VARvariable(s);语句说明:BY规定对每个BY组求转置,BY变量包含在输出数据集中但没有被转置COPY将没有转置的变量直接拷贝到输出数据集中ID规定输入数据集中一个变量。其值为转置后数据集的变量名IDLABEL规定被转置变量的标签VAR列出要转置的变量PROCTRANSPOSE语句PROCTRANSPOSEoption-list;选项说明:DATA=规定被转置的SAS数据集,省略时为最新创建的数据集OUT=转置后的SAS数据集,省略时SAS系统产生一个名子为DATAn的数据集PREFIX=规定转置后数据集变量名的前缀NAME=规定转置后数据集中的一个变量名,省略时该变量名为_NAME_LABEL=规定转置后变量的标签,省略该选项,且原数据集中至少有一个要转置的变量有标签时,该变量标签为_LABEL_LET允许ID变量出现相同的值。BY组内最后一个ID值的观测被转置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;结果显示:Obs_NAME_FM1Age15152Height66.566.53Weight112112proctransposedata=ResDat.classout=alet;idsex;bysex;procprint;run;结果显示:ObsSex_NAME_FM1FAge15.2FHeight66.5.3FWeight112.4MAge.155MHeight.66.56MWeight.112例15.8对每个BY组转置。optionsnodatepageno=1linesize=80pagesize=40;proctransposedata=ResDat.fishdataout=fishlength(rename=(col1=Measurement));varlength1-length4;bylocationdate;run;procprintdata=fishlengthnoobs;title'FishLengthDataforEachLocationandDate';run;FishLengthDataforEachLocationandDate1LocationDate_NAME_MeasurementColePond02JUN95Length131ColePond02JUN95Length232ColePond02JUN95Length332ColePond02JUN95Length433ColePond03JUL95Length133ColePond03JUL95Length234ColePond03JUL95Length337ColePond03JUL95Length432ColePond04AUG95Length129…………输出窗口显示例15.10对转置后的数据集作统计分析。optionsnodatepageno=1linesize=80pagesize=40;datasplit;setResDat.weights;arrays{7}s1-s7;subject+1;doTime=1to7;strength=s{time};output;end;drops1-s7;run;procprintdata=split(obs=15)noobs;title'SplitDataSet';title2'First15ObservationsOnly';run;/*接左侧*/proctransposedata=splitout=totsplitprefix=Str;byprogramsubject;copytimestrength;varstrength;run;procprintdata=totsplit(obs=15)noobs;title'TotsplitDataSet';title2'First15ObservationsOnly';run;改变输出地点缺省情况下,SAS过程输出到OUTPUT窗口,SAS日志输出到LOG窗口。利用SAS的PRINTTO过程可以设定SAS过程和日志的输出地点。PRINTTO过程有以下功能:改变过程输出的目的地;改变SAS日志输出的目的地;有选择地限制SAS输出;将输出结果存放在永久文件中;将输出直接送到打印机上;将SAS的输出作为输入数据(这时需要一些附加的程序语句)。PRINTTO过程句法PROCPRINTTOoption(s);选项说明注意:一般情况下,PROCPRINTTO后面一定要加RUN语句。若省略RUN语句,则会丢失PRINTTO后面DATA步或PROC步第一行的输出。没有选项恢复缺省时的输出目的地LABEL=给存贮在SAS目录册中SAS日志或输出结果加说明标签LOG=将SAS日志输出到外部永久文件或SAS目录册中LOG=andPRINT=将SAS日志和运行结果输出到一个文件中NEW替换原输出文件PRINT=将运行结果输出到外部永久文件或SAS目录册中UNIT=将结果直接输出到文件标记为FTnnF001的文件中应用举例例15.11将SAS日志输出到外部永久文件。procprinttolog='d:\log.dat';/*直接输出到永久文件中*/filenamef1'd:\out.txt';procprinttolog=f1;/*输出到文件标记*/例15.12将运行结果输出到外部永久文件。filenamef2'd:\out.list';procprinttoprint=f2;/*输出到文件标记*/procprinttoprint='d:\out.list';/*直接输出到永久文件中*/例15.13直接打印输出结果。filenamefprinter;procprinttoprint=f;/*直接打印*/procprinttoprint=print;/*返回到缺省输出地点*/例15.14替换原输出文件。procprinttoprint='d:\out.txt'log='d:\log.dat'new;procprintdata=ResDat.class;run;添加观测利用SAS的APPEND过程可以将一个SAS数据集的观测添加到另一个SAS数据集的后面。APPEND过程句法PROCAPPENDBASE=SAS-data-setDATA=SAS-data-setFORCE;APPEND过程中只需要一个语句。选项说明:BASE=|OUT=规定基本数据集的名子DATA=|NEW=规定要添加在基本数据集后面的数据集名,缺省时使用最近创建的SAS数据集FORCE强迫PROCAPPEND连接两数据集应用举例例15.17有条

1 / 73
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功