第6章数据步文件管理清华大学经管学院朱世武Zhushw@sem.tsinghua.edu.cnResdat样本数据:论坛:(data-set-options-1)...data-set--name--n(data-set-options-n)/DEBUG;DATAview-namedata-set-name-1(data-set-options-1)...data-set-name-n(data-set-options-n)/VIEW=view-name(password-optionSOURCE=source-option);DATAdata-set-name/PGM=program-name(password-optionSOURCE=source-option);DATAPGM=program-name(password-option);DESCRIBE;REDIRECTREDIRECTINPUT|OUTPUTold-name-1=new-name-1...old-name-n=new-name-n;EXECUTE;DATAVIEW=view-name(password-option);DESCRIBE;选项说明这里只给出常用选项的说明,其它选项说明可以从SAS系统帮助中查找。data-set-name规定要创建的SAS数据集Data-set-options数据集选项VIEW=创建DATA步数据视窗文件PGM=存贮被编辑程序例6.1规定要创建的SAS数据集。data;/*系统自动规定数据集名datan*/dataa;/*创建临时数据集a*/dataResDat.a;/*创建永久数据集resdat.a*/datadata1data2;/*创建两个临时数据集data1和data2*/data_null_;/*特殊名,不创建SAS数据集,用于输出*/Run;例6.2数据集选项举例。datanew(drop=var1);/*去掉数据集new中变量var1*/datanew(keep=_numeric_);/*保留数据集new中所有数值变量*/datanew(label=’股本变动历史’);/*规定数据集new标签名为”股本变动历史”*/datanew(rename=(var1=uvar2=v));/*将数据集new中变量var1和var2更名为u和v*/databook(index=(authorsubject));/*数据集book对变量authorsubject建立索引*/特殊数据集名_data_(省略数据集名)data_data_;/*等价于语句data;*/系统自动为数据集赋名:data1,data2,…,datan._null_一般和PUT语句一起用。由PUT输出结果,只输出到LOG窗口,不会产生SAS数据集。例6.6不产生数据集。data_null_;x=exp(5);y=log(10);putx=y=;run;80data_null_;81x=exp(5);82y=log(10);83putx=y=;84run;x=148.4131591y=2.302585093NOTE:“DATA语句”所用时间(总处理时间):实际时间0.03秒CPU时间0.00秒_last__last_是SAS系统的一个自动变量,取值为最新创建的SAS数据集名。例6.7查看最新创建的SAS数据集。dataa;set_last_;run;一个DATA语句下多个数据集名例6.8观测子集的形成。datayear1998year1999year2000;setResDat.stk000001;ifyear(date)=1998thenoutputyear1998;/*year为函数名*/elseifyear(date)=1999thenoutputyear1999;elseifyear(date)=2000thenoutputyear2000;run;例中,根据条件产生三个观测子集,名字分别为YEAR1998,YEAR1999和YEAR2000.85datayear1998year1999year2000;86setResDat.stk000001;87ifyear(date)=1998thenoutputyear1998;/*year为函数名*/88elseifyear(date)=1999thenoutputyear1999;89elseifyear(date)=2000thenoutputyear2000;90run;NOTE:从数据集RESDAT.STK000001读取了3836个观测。NOTE:数据集WORK.YEAR1998有245个观测和62个变量。NOTE:数据集WORK.YEAR1999有237个观测和62个变量。NOTE:数据集WORK.YEAR2000有238个观测和62个变量。NOTE:“DATA语句”所用时间(总处理时间):实际时间0.06秒CPU时间0.04秒CARDS与CARDS4语句CARDS语句或DATALINES语句告诉SAS系统下面跟着的是数据行。数据行之前用CARDS语句或DATALINES语句。语句格式:CARDS;或DATALINES;[数据行]例6.10数据行之前用CARDS语句。data;inputvar1var2var3$;cards;1620First;数据行中含有分号时,必须用CARDS4或DATALINES4语句。语句格式:Cards4;或DATALINES4;[数据行];;;;例6.11数据行中含有分号时用CARDS4语句。data;inputvar1$var2$var3$;cards4;A;B(;);;;;PUT语句PUT语句输出信息到:SAS系统的LOG窗口;SAS系统的OUTPUT窗口;FILE语句规定的外部文件。简单方式:PUTspecification(s)@|@@;PUTpointer-controlspecification...specification@|@@;列方式:PUTvariable$start-column-end-column.decimalplaces@|@@;格式化方式:PUTvariable$start-column-end-column.decimalplaces@|@@;PUTpointer-controlvariableformat.@|@@;PUTpointer-control(variable-list)(format-list)@|@@;列表方式:PUTpointer-controlvariable$@|@@;PUTpointer-controln*'character-string'@|@@;PUTpointer-controlvariable:|~format.@|@@;命名方式:PUTpointer-controlvariable=format.@|@@;PUTvariable=$start-column-end-column.decimalplaces@|@@;语句格式例6.12用PUT语句产生的输出结果及其比较。data_null_;put132*'_';/*在log窗口输出132个下划线_*/put100*'1';/*在log窗口输出100个1*/run;data_null_;inputxyz;put_infile_;/*输出最新的数据行到SASLog窗口*/cards;1-590371028;run;LOG窗口输出结果:1-590371028例6.14其它控制输出格式举例。data_null_;setResDat.class;bysex;fileprint;*向结果窗口输出;putname1-8@12sex;iflast.sexthenput//'Thisisthelastof'sex$_page_;run;AliceFBarbaraFCarolFJaneFJanetFJoyceFJudyFLouiseFMaryFThisisthelastofFAlfredMHenryMJamesMJeffreyMJohnMPhilipMRobertMRonaldMThomasMWilliamMThisisthelastofM第一页第二页输出窗口显示:data;put'Exampleofoverprint'overprint'-------------------------';run;LOG窗口输出结果:Exampleofoverprint-------------------------列方式输出语句格式:PUTvariable$start-column-end-column.decimalplaces@|@@;例6.15控制输出的列位置。dataa;a=100;b=300;puta10-16.2b20-26.3;run;LOG窗口输出结果:100.00300.000列表方式输出语句格式:PUTpointer-controlvariable$@|@@;PUTpointer-controln*'character-string'@|@@;PUTpointer-controlvariable:|~format.@|@@;修饰符说明:n*规定后面格式重复n次;:规定后面格式输出变量值时去掉前后的空格;例6.16应用举例。dataa;x1=134569.236;x2=18969.06;x3=3592.191;put(_all_)(3*comma10.2);run;LOG窗口输出结果:134,569.2418,969.063,592.19格式化输出语句格式:PUTvariable$start-column-end-column.decimalplaces@|@@;PUTpointer-controlvariableformat.@|@@;PUTpointer-control(variable-list)(format-list)@|@@;例6.17应用举例。dataa;inputname&$10.bldg$room;/*变量name有空格*/putname@20(bldgroom)($1.-,3.);/*从第20列开始输出第二、三个变量*/cards;GUBEIJINGJ125ROBERTUSC233;run;LOG窗口输出结果:53dataa;54inputname&$10.bldg$room;/*变量name有空格*/55putname@20(bldgroom)($1.-,3.);/*从第20列开始输出第二、三个变量*/56cards;GUBEIJINGJ-125ROBERTUSC-233NOTE:数据集WORK.A有2个观测和3个变量。NOTE:“DATA语句”所用时间(总处理时间):实际时间0.01秒CPU时间0.00秒59;60run;上面程序也可以写成:dataa;inputname&$10.bldg$room;a='-';putname@20bldg$a$room;cards;GUBEIJINGJ125ROBERTUSC233;run;但第一种方法的效果好。LOG窗口输出结果:61dataa;62inputname&$10.bldg$room;63a='-';64putname@20bldg$a$room;65cards;GUBEIJINGJ-125ROBERTUSC-233NOTE:数据集WORK.A有2个观测和4个变量。NOTE:“DATA语句”所用时间(总处理时间):实际时间0.0