SAS (统计分析软件)课件:第6章 数据步文件管理_第1页
SAS (统计分析软件)课件:第6章 数据步文件管理_第2页
SAS (统计分析软件)课件:第6章 数据步文件管理_第3页
SAS (统计分析软件)课件:第6章 数据步文件管理_第4页
SAS (统计分析软件)课件:第6章 数据步文件管理_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第6章 数据步文件管理DATA语句 语句格式 DATA data-set-name-1 .data-set-name-n ; DATA view-name data-set-name-1 . . .data-set-name-n / VIEW=view-name (); DATA data-set-name / PGM=program-name (); DATA PGM=program-name (); REDIRECTREDIRECT INPUT | OUTPUT old-name-1 = new-name-1 ; DATA VIEW=view-name (); DESCRIBE; 选项说明

2、 这里只给出常用选项的说明,其它选项说明可以从SAS系统帮助中查找。 例6.1 规定要创建的SAS数据集。data; /*系统自动规定数据集名data n * /data a; /*创建临时数据集a */data ResDat .a; /*创建永久数据集resdat.a */data data1 data2; /*创建两个临时数据集data1和data2 */data _null_; /*特殊名,不创建SAS数据集,用于输出 */Run;例6.2 数据集选项举例。data new (drop=var1); /*去掉数据集new中变量var1*/data new (keep=_numeric_)

3、; /*保留数据集new中所有数值变量*/data new (label=股本变动历史); /*规定数据集new标签名为”股本变动历史”*/data new (rename=(var1=u var2=v); /*将数据集new中变量var1和var2更名为u和v*/data book(index=(author subject); /*数据集book对变量author subject建立索引*/ 特殊数据集名 _data_ (省略数据集名)data _data_; /*等价于语句data;*/系统自动为数据集赋名:data1, data2, datan. _null_ 一般和PUT语句一起用。

4、由PUT输出结果,只输出到LOG窗口,不会产生SAS数据集。例6.6 不产生数据集。data _null_; x=exp(5);y=log(10);put x= y=;run;80 data _null_;81 x=exp(5);82 y=log(10);83 put x= y=;84 run;x=148.4131591 y=2.302585093NOTE: “DATA 语句”所用时间(总处理时间): 实际时间 0.03 秒 CPU 时间 0.00 秒_last_last_是SAS系统的一个自动变量,取值为最新创建的SAS数据集名。例6.7 查看最新创建的SAS数据集。data a;set _

5、last_;run; 一个DATA语句下多个数据集名 例6.8 观测子集的形成。 data year1998 year1999 year2000;set ResDat.stk000001 ;if year (date)=1998 then output year1998; /* year为函数名*/else if year (date)=1999 then output year1999;else if year (date)=2000 then output year2000;run;例中,根据条件产生三个观测子集,名字分别为YEAR1998, YEAR1999和YEAR2000. 85 d

6、ata year1998 year1999 year2000;86 set ResDat.stk000001 ;87 if year (date)=1998 then output year1998; /* year为函数名*/88 else if year (date)=1999 then output year1999;89 else if year (date)=2000 then output year2000;90 run;NOTE: 从数据集 RESDAT.STK000001 读取了 3836 个观测。NOTE: 数据集 WORK.YEAR1998 有 245 个观测和 62 个变

7、量。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;input var1 var2 var3 $;cards;16

8、 20 First;数据行中含有分号时,必须用CARDS 4或DATALINES4语句。语句格式:Cards 4; 或DATALINES4;数据行;例6.11 数据行中含有分号时用CARDS4语句。data;input var1$ var2$ var3 $;cards4;A ; B( ; );PUT语句 PUT语句输出信息到:SAS系统的LOG窗口;SAS系统的OUTPUT窗口;FILE语句规定的外部文件。简单方式: PUT ;PUT .specification ; 列方式: PUT start-column ;格式化方式: PUT start-column ;PUT variable fo

9、rmat.;PUT (variable-list) (format-list) ;列表方式: PUT variable ;PUT character-string ;PUT variable format. ;命名方式: PUT variable= ;PUT variable= start-column ;语句格式 例6.12 用PUT语句产生的输出结果及其比较。 data _null_;put 132 * _; /*在log窗口输出132个下划线_*/put 100*1; /* 在log窗口输出100个1*/run;data _null_ ;input x y z;put _infile_

10、; /*输出最新的数据行到SAS Log窗口*/cards;1 -5 90 3 710 2 8;run;LOG窗口输出结果: 1 -5 9 0 3 7 10 2 8 例6.14 其它控制输出格式举例。 data _null_;set ResDat.class;by sex;file print;put name 1-8 12 sex;if last.sex then put / This is the last of sex $ _page_;run;Alice FBarbara FCarol FJane FJanet FJoyce FJudy FLouise FMary FThis is t

11、he last of FAlfred MHenry MJames MJeffrey MJohn MPhilip MRobert MRonald MThomas MWilliam MThis is the last of M第一页第二页输出窗口显示:data;put Example of overprint overprint ;run;LOG窗口输出结果:Example of overprint列方式输出 语句格式: PUT start-column ;例6.15 控制输出的列位置。 data a;a=100;b=300;put a 10-16 .2 b 20-26 .3;run;LOG窗口输

12、出结果:100.00 300.000 列表方式输出 语句格式: PUT variable ;PUT character-string ;PUT variable format. ;修饰符说明: n*规定后面格式重复n次; : 规定后面格式输出变量值时去掉前后的空格; 例6.16 应用举例。data a;x1=134569.236;x2=18969.06;x3=3592.191;put (_all_) (3*comma10.2);run;LOG窗口输出结果:134,569.24 18,969.06 3,592.19格式化输出 语句格式: PUT start-column ;PUT variabl

13、e format.;PUT (variable-list) (format-list) ;例6.17 应用举例。 data a;input name & $10. bldg $ room; /*变量name有空格*/put name 20 (bldg room) ($1.-, 3.); /*从第20列开始输出第二、三个变量*/cards;GU BEIJING J 125ROBERT US C 233;run;LOG窗口输出结果:53 data a;54 input name & $10. bldg $ room; /*变量name有空格*/55 put name 20 (bldg room)

14、($1.-, 3.); /*从第20列开始输出第二、三个变量*/56 cards;GU BEIJING J-125ROBERT US C-233NOTE: 数据集 WORK.A 有 2 个观测和 3 个变量。NOTE: “DATA 语句”所用时间(总处理时间): 实际时间 0.01 秒 CPU 时间 0.00 秒59 ;60 run;上面程序也可以写成: data a;input name & $10. bldg $ room ;a=-;put name 20 bldg $ a $ room;cards;GU BEIJING J 125ROBERT US C 233;run;但第一种方法的效果

15、好。LOG窗口输出结果:61 data a;62 input name & $10. bldg $ room ;63 a=-;64 put name 20 bldg $ a $ room;65 cards;GU BEIJING J - 125ROBERT US C - 233NOTE: 数据集 WORK.A 有 2 个观测和 4 个变量。NOTE: “DATA 语句”所用时间(总处理时间): 实际时间 0.03 秒 CPU 时间 0.00 秒68 ;69 run;BY语句 数据步中,BY语句规定分组变量。用于控制SET,MERGE,UPDATE或MODIFY语句的操作。语句格式 By Vari

16、able-1. Variable-N ;选项说明 BY语句概念 FIRST.变量和LAST.变量 SAS系统对每个BY组创建两个自动变量:First.variable 和 Last.variable, 用来标识每个BY组的第一个和最后一个观测。对于一个BY组的第一个观测值,First.variable取1,其余取0.对于一个BY组的最后一个观测值,Last.variable取1,其余取0.这些变量不含在新产生的数据集中。 例6.18 保留各BY组的最后一个观测值。 data a;set ResDat.stk000001; month=month(date);year=year(date);pr

17、oc sort data=a;by year month;data b;set a;by year month;if last.month; /*保留每月最后一个观测值 */run;SET语句 SET语句从一个或多个已存在的SAS数据集中读取观测值,并将这些观测组合在一个数据集中。 语句格式:SET data-set-name-1 data-set-name-n /UNIQUE ;一个DATA步中可以有多个SET语句,一个SET语句中可以有任个SAS数据集。 选项说明 没有变元读最新创建数据集Data-Set-Name规定要组合的数据集Data-Set-Options规定对数据集的操作, 常用

18、选项keep=,Drop=,rename=,where=和in=。Point=Variable_Name规定一个临时变量控制SET语句读入的观测序号NOBS=Variable_Name规定一个临时变量,记录读入数据集的观测总数。此变量不含在新产生的数据集中END=Variable_Name规定一个临时变量,作为文件结束的标识。文件结束时取值1,其它观测取0。此变量不含在新的数据集中应用举例 例6.19 选项说明若干举例。规定临时变量选项Point=:data a;set ResDat.Idx000001;obs=_n_;data b (keep=obs date clpr);do n=3,5,

19、7,4;set a point=n; /*读入数据集a中的第3,5,7,4观测 */if _error_=1 then abort;output;end;stop; /*使用选项point=时,经常要用stop语句来终止data步的执行*/proc print;run;例6.22 数据集选项in=var。 data a;set one(in=one) two(in=two);in1=one;in2=two;run;数据集a:xyZin1in21Groucho103Harpo105Kart102Chico014Zeppo01规定临时变量选项NOBS=: data a;do obsnum=1 to

20、 last by 20; /*临时变量为last */set ResDat.stk000001 point=obsnum nobs=last;output;end;stop;run;如何找数据集的观测个数: data a;a=nobs; set ResDat.stk000001 nobs=nobs;if _n_=a;run;如何找数据集的最后一个观测值: data a;set ResDat.stk000001 nobs=nobs;if _N_=NOBS;run;找数据集最后一个观测值更简单的方法: data a;set ResDat.stk000001 end=obs_last;if obs_

21、last=1;run;输出数据集的最后一个观测值: data a;set ResDat.stk000001 End=lastobs;if lastobs;x=lastobs; /*将临时变量lastobs的值赋给X*/ put last observation;run;例6.23 数据集选项说明若干举例。保留部分变量:data a ;set ResDat.Idx000001(keep=date clpr);run;data b (keep=date clpr);set ResDat.Idx000001;run;data c;set ResDat.Idx000001;keep date clpr

22、;run;上述三段程序的结果相同。注意,但第三段程序用的是KEEP语句,并不是数据集选项的应用。data oppr(keep=date oppr) clpr(keep=date clpr);set ResDat.stk000001;run; 保留部分观测:data males;set ResDat.class;where sex=M;run;data males;set ResDat.class;if sex=M then output;run;data males;set ReaDat.class;if sex=M then delete;run;例6.24 相同变量的数据集连接。data

23、qttn;set ResDat.stk000001 ResDat.stk000002; run;例6.25 不同变量的数据集连接。data a;set ResDat.class ResDat.stk000001;run;MERGE语句 MERGE语句将多个数据集中的观测合并为新数据集中的一个观测。SAS系统合并观测的方式依赖于BY语句的使用。 语句格式 MERGE data-set-name-1 data-set-name-2 data-set-name-n ;选项说明 应用举例例6.27 一对一合并 data a;merge ResDat.class ResDat.stk000001;run

24、;例中,一对一合并时,不需要BY语句。 例6.28 匹配合并 data a;merge ResDat.stk000001 (keep=date clpr rename=(clpr=clpr000001)ResDat.stk000002 (keep=date clpr rename=(clpr=clpr000002);by date;run;例中,匹配合并必须有BY语句。 例6.29 使用数据集选(in=),选择股票代码为000001,200011,600601和900903的首次发行与上市数据。Data stkcd;Input stkcd$6.;Cards;000001 20001160060

25、1900903;Data Iissulst1;Merge Resdat. Iissulst stkcd(in=id);If id; /* 选择满足条件股票的首次发行与上市数据 */Run;FILE语句 FILE 语句用于规定将要输出的外部文件。FILE 语句一般要与PUT语句配合使用。同一个DATA步可以用多个FILE语句。FILE语句是可执行语句,因而可以用在条件(IFTHEN)过程中。语句格式 FILE file-specification ;FILE-SPECIFICATION选项说明: OPTIONS选项说明(部分): 选项说明DELIMITER= string-in-quotatio

26、n-marks | character-variable/ DLM=指定列表输出时所用的分隔符,在别的输出形式中该选项不起作用。缺省情况下为空格。DROPOVER规定当输出数据行的长度超过规定值时,忽略超过的部分。FLOWOVER规定当输出数据行的长度超过规定值时,超出部分在下一行输出。缺省状态为FLOWOVER。DSD规定一个数据可以包含分隔符,要用引号括住。FILENAME=variable定义一个字符变量,其值为PUT语句打开的文件名。FILEVAR=variable定义一个变量,FILE语句根据其值的变化关闭和打开输出文件。例6.39 filename=variable选项应用 dat

27、a a;file print filename=xxx; /* 输出到OUTPUT窗口,put语句打开的文件名为print */put hello; /* OUTPUT窗口将输出hello */name=xxx; /* 数据集a中有一个变量name和一个观测值print */run; 数据集aname1PRINTdata a;file d:a.txt filename=xxx; /* 输出到文件d:a.txt,put语句打开的文件名为d:a.txt*/put hello; /* 文件d:a.txt的内容为: hello*/fname=xxx;run;fname1d:a.txt数据集a例6.43

28、 输出规定格式的外部文本文件。data;set ResDat.lstkinfo;a=%a(;b=,;c=); ;file “D:stock.txt” ;put a $ stkcd $ b $ lstknm $ c $ ;run;例中程序产生股票宏文本文档。 INFILE语句 INFILE语句用来定义一个外部数据文件,文件中的数据用INPUT语句读取。外部文件可以是已存在的磁盘文件,也可以是从键盘上输入的数据行。语句格式 INFILE file-specification ; FILE-SPECIFICATION选项说明:EXTERNAL FILE和 FILEREF选项类似FILFE语句的相应选

29、项。CARDS|CARDS4|DATALINES|DATALINES4选项指明输入数据为CARDS(CARDS4, DATALINES, DATALINES4)后面的数据流,而非来自外部数据文件。 大部分选项的作用和FILE的一致。下面只介绍几个INFILE独有的选项。 OPTIONS选项说明选项说明DSD规定若一个数据由引号括起,则SAS认为其包含的逗号是字符数据。设定缺省分隔符为逗号。两个连续分隔符中间数据为缺失。读入时去掉数据的引号。END=variable定义一个变量标记是否已经到达输入文件的结尾。FIRSTOBS=record-number规定从该记录行开始读入MISSOVER阻止INPUT语句从下一个数据行读入数据,未赋值的变量设为缺失。OBS=record-number | MAX规定要读入的记录数.例6.44 DELIMITER=选项应用 data a;infile cards delimiter=,;input x y z;cards;3,6,91,3,58,8,8;例中,要输入的数据用逗号分隔,创建SAS数据集时用选项DELIMITER=,。 数据集axyz136921353888例6.47 DSD选项应用 data scores;infile datalines delimiter=,;input test1 test2 test3;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论