您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 金融数据库――15数据管理
第15章数据管理清华大学经济管理学院朱世武zhushw@em.tsinghua.edu.cnSAS系统提供的过程按其用途可分为四大类:数据管理;基础统计;数据呈现;数据访问。和任何一种编程语言一样,SAS系统有一些数据管理过程,用于实现常用的中间操作或数据转换。本章将介绍的数据管理过程:数据集排序;数据集转置;改变输出地点;添加观测;数据库复制。数据集排序利用SAS的排序过程可以对数据集中的观测重新排序。SAS许多和BY配合使用的语句,如对数据集进行合并的语句或更新语句等,使用前必须先对BY变量进行排序。排序过程句法PROCSORToption(s)collating-sequence-option;BYDESCENDINGvariable-1...DESCENDINGvariable-n;PROCSORT语句PROCSORToption-listcollating-sequence-option;选项说明:DATA=规定被排序数据集,缺省时为最新创建数据集OUT=创建输出数据集,省略时用排序后数据集替换原数据集ASCII规定按ASCII排序EBCDIC规定按EBCDIC排序DANISH规定按Danish排序FINNISH规定按Finnish排序NORWEGIAN规定按Norwegian排序SWEDISH规定按Swedish排序NATIONAL规定按习惯排序SORTSEQ=规定按其中任一标准排序:ASCII,EBCDIC,DANISH,FINNISH,ITALIAN,NORWEGIAN,SPANISH,SWEDISHREVERSE颠倒字符变量的次序EQUALS保持BY组内的顺序NOEQUALS允许BY组内顺序变化NODUPKEY删除重复BY值对应的观测NODUPRECS删除重复观测值SORTSIZE=规定有效存贮空间FORCE强行实施多余排序TAGSORT减少临时存贮空间其中:选项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;setfdata.a1a0001;year=year(date);qtr=qtr(date);month=month(date);procsortdata=aout=b;byyearqtrmonth;run;例中,对上证数据A1A0001按年、季和月排序。例15.2按单变量降序排列。procsortdata=fdata.a600001out=a;bydescendingclpr;procprintdata=a(obs=3)noobs;vardateclpr;run;例中,按收盘价CLPR的降序排列。例15.3显示排序后BY组的第一个观测。optionsnodatepageno=1linesize=80pagesize=60;procsortdata=fdata.accountout=townsnodupkey;bytown;run;procprintdata=towns;vartowncompanydebtaccountnumber;title'TownsofCustomerswithPast-DueAccounts';run;数据集转置转置就是把数据集的观测变为变量,变量变为观测。利用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语句时,则没有列在其它语句里的所有数值变量被转置。字符变量若要转置必须在VAR语句中列出。没有被转置的变量从新数据集中删除,要保留时须将它们在COPY或BY语句中列出。ID语句IDvariable;ID语句规定输入数据集中一个变量。ID变量的值为转置后数据集的变量名。在没有选项LET时,ID变量的值在数据集中只能出现一次,使用BY语句,BY组内只包含最后的ID值。必要时过程会将ID变量的值改为有效的SAS名子。如将字符”+”,”-”和”.”改为”P”,”N”和”D”。若第一个字符是数学,则用下划线(_)作为这个值的词头。使用ID语句时,ID变量的缺失值将从输出数据集中删去。应用举例例15.4ID变量的值为转置后数据集的变量名。proctransposedata=fdata.classout=alet;idname;procprint;run;例中,原数据集CLASS中变量NAME的值为转置后数据集A的变量名,对所有数值变量转置。数据集A中还有一变量_NAME_.proctransposedata=fdata.r_monthout=alet;iddate;procprint;run;例中,原数据集R_MONTH中变量DATE的值为转置后数据集A的变量名,对所有数值变量转置。数据集A中还有一变量_NAME_和_LABEL_.例15.5BY组内最后一个ID值的观测被转置。proctransposedata=fdata.classout=alet;idsex;procprint;run;结果显示:Obs_NAME_FM1Age15152Height66.566.53Weight112112proctransposedata=fdata.classout=alet;idsex;bysex;procprint;run;结果显示:ObsSex_NAME_FM1FAge15.2FHeight66.5.3FWeight112.4MAge.155MHeight.66.56MWeight.112proctransposedata=fdata.classout=a;varnameheightweight;copysexage;procprint;run;procsortdata=fdata.classout=a;byname;proctransposedata=alet;byname;procprint;run;例15.6规定转置后数据集变量名的前缀。optionsnodatepageno=1linesize=80pagesize=40;proctransposedata=fdata.scoreout=idnumbername=Testprefix=sn;idstudentid;run;procprintdata=idnumbernoobs;title'StudentTestScores';run;例15.7规定转置后数据集变量名的标签。optionsnodatepageno=1linesize=80pagesize=40;proctransposedata=fdata.scoreout=idlabelname=Testprefix=sn;idstudentid;idlabelstudent;run;procprintdata=idlabellabelnoobs;title'StudentTestScores';run;例15.8对每个BY组转置。optionsnodatepageno=1linesize=80pagesize=40;proctransposedata=fdata.fishdataout=fishlength(rename=(col1=Measurement));varlength1-length4;bylocationdate;run;procprintdata=fishlengthnoobs;title'FishLengthDataforEachLocationandDate';run;例15.9ID变量有重复值时命名转置后的变量。optionsnodatepageno=1linesize=64pagesize=40;proctransposedata=fdata.stocksout=closelet;bycompany;iddate;run;procprintdata=closenoobs;title'ClosingPricesforHorizonKitesandSkyHiKites';run;例15.10对转置后的数据集作统计分析。optionsnodatepageno=1linesize=80pagesize=40;datasplit;setfdata.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步第一行的输出。没有
本文标题:金融数据库――15数据管理
链接地址:https://www.777doc.com/doc-5951805 .html