《SAS统计软件数据步变量与变量属性控制课件.ppt》由会员分享,可在线阅读,更多相关《SAS统计软件数据步变量与变量属性控制课件.ppt(94页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第9章数据步变量与变量属性控制章数据步变量与变量属性控制清华大学经管学院清华大学经管学院 朱世武朱世武本章内容本章内容本章介绍利用数据步变量与信息控制语句进行数据加工整理。数据步变量与信息控制语句规定数据集中变量个数及相关信息。变量与信息控制语句不是执行语句,可以出现数据步的任何地方,且功能相同。ARRAY语句语句 ARRAY语句用于定义数组。数组通常由一组变量构成。利用数组可以简化很多复杂的数据处理过程。SAS系统引用数组等价引用构成数组的那一组变量。显式下标数组语句显式下标数组语句 显式下标数组显式下标数组由数组名,元素个数说明,及元素列表等构成。通过数组名引用整个数组,通过数组元素序号
2、(也称为下标)引用该元素。语句格式ARRAYarray-namesubscript;选项说明:下标的三种格式下标的三种格式 下标用于表示数组中元素的个数和排列的范围。括号可用大括号,中括号或圆括号。下标格式有三种:例9.1用格式一定义一维、二维数组。Arraysimple3red,green,yellow;/*定义一维数组*/例中,数组名为simple,数组有三个元素,对应的变量命名分别为red,green,yellow.Arrayx5,3scorel-score15;/*定义二维数组*/例中,数组名为X,15个变量scorel-score15按顺序从左上角开始逐行放入这个二维数组。例9.2用
3、格式二定义二维数组。Arrayx1:5,1:3scorel-score15;当用1作为数组下界时可以省略。注意:用0作为下界时,可以加快处理时间,因为计算下标的时间减少了。数组元素表示方法数组元素表示方法 数组元素必须全是数值变量,或全是字符变量,可以用任意顺序列出。数组元素的两种表示方法:列出变量名;建立临时数组元素列表。例9.3列出变量名。ArrayC3Cl-C3;ArrayC3;/*和上例句等价*/ArrayA*_NUMERIC_;ArrayA*_CHARACTER_;建立临时数组元素列表:建立临时数组元素列表:_TEMPORARY_;使用临时数组元素列表可以少占用内存,加快执行时间。可
4、以像使用DATA步中变量那样使用临时数组元素,但要注意有下面几点不同:它们没有名字,引用时必须用数组名和下标;不能出现在输出的数据集上;不能用特殊下标(*)来引用所有元素;临时数组元素的值被自动保存,而不是像DATA步中的变量,在下一次重复开始时被置为缺失值。例9.4建立临时数组元素。若用如下程序,则会产生新变量t1,t2,t3;dataa;setResDat.class;arrayt(3)(5,10,15);run;若用临时数组,则不会产生新变量dataa;setResDat.class;arrayt(3)_temporary_(5,10,15);run;NameSexAgeHeight W
5、eight t1 t2 t3AliceF1356.58451015BarbaraF1365.39851015CarolF1462.8102.551015JaneF1259.884.551015JanetF1562.5112.551015JoyceF1151.350.551015使用临时数组不用临时数组NameSexAgeHeight WeightAliceF1356.584BarbaraF1365.398CarolF1462.8102.5JaneF1259.884.5JanetF1562.5112.5JoyceF1151.350.5初始值表示方法初始值表示方法 例9.5数组元素和初值通过对应位
6、置来确定。arraytest(3)t1t2t3(908070);arrayab(5)(543);例中,第一个语句数组元素的个数与初值的个数相同,把初值90,80和70依次赋给变量t1,t1和t3。第二个语句分配5给ab1,4给ab2,3给ab3,因数组元素比给出的初始值多,多余的变量ab4和ab5为缺失值,而且SAS系统将发布一个警告信息。应用举例应用举例 例9.6定义数组例句。arrayrain5x1-x5;arrayab(*)xyz;arrayx*_numeric_;arraytest(3)_temporary_(908070);arraydays7d1-d7;arrayx2:5green
7、reddenatofetzer;arraytest(3:4,3:7)test1-test10;引用显式下标数组元素引用显式下标数组元素 凡是可用表达式的地方,都可以使用数组元素。例9.7通过下标引用数组元素。datanew;inputqa1-qa10qb1-qb10;arraytest10qa1-qa5qb1-qb5;puttest4=test6=;cards;11161111118222222222;例中,输出qa1和qb1的值,即数组元素test(4)引用qa4,数组元素test(6)引用qb1.一个数组的定义仅在当前的DATA步有效。如果想在几个DATA步引用同一个数组,必须在每个DAT
8、A步中都定义这个数组。455datanew;456inputqa1-qa10qb1-qb10;457arraytest10qa1-qa5qb1-qb5;458puttest4=test6=;459cards;qa4=6qb1=8NOTE:数据集WORK.NEW有1个观测和20个变量。NOTE:“DATA语句”所用时间(总处理时间):实际时间0.01秒CPU时间0.01秒461;例9.9规定数组的一些特殊元素作为循环DO语句范围。arrayday(7)d1-d7;doi=2to4;doi=1to7by2;doi=1,3;例中,处理数组DAY中选定的一些特殊元素。循环循环DO组中引用组中引用 例9
9、.10一个循环DO组里处理多个数组。arrayday(*)d1-d4;doi=1todim(day);day(i)=day(i)+10;end;例中,循环DO语句里使用DIM函数得到数组中元素的个数。用DIM函数作为DO语句上界时,这个上界会根据数组元素个数的实际情况自动调整,用DIM函数作为DO语句上界的所有语句都不必改动。例9.10引用规定上下界的一维数组。Arrayyrs76:85year76-year85;doi=76to85;ifyrs(i)=9thenyrs(i)=.;end;do i=lbound(yrs)to hbound(yrs);ifyrs(i)=9thenyrs(i)=.
10、;end;例中,两个DO组是等价的。第二个DO组中LBOUND函数取数组YRS的下界,而HBOUND函数取YRS的上界。DO WHILE和和DO UNTIL组引用组引用 使用DOWHILE或DOUNTIL语句处理数组时,首先要创造循环变量,然后利用数组说明实现DOWHILE或DOUNTIL语句的条件,最后使用程序语句来改变循环变量的值。例9.13DOWHILE语句用法。datatest;inputx1-x5y;arrayt(5)x1-x5;i=1;dowhile(t(i)y);putt(i)=y=;i=i+1;end;cards;123453024686;run;482datatest;483
11、inputx1-x5y;484arrayt(5)x1-x5;485i=1;486dowhile(t(i)y);487putt(i)=y=;488i=i+1;489end;490cards;x1=1y=3x2=2y=3x1=0y=6x2=2y=6x3=4y=6NOTE:数据集WORK.TEST有2个观测和7个变量。NOTE:“DATA语句”所用时间(总处理时间):实际时间0.01秒CPU时间0.00秒493;494run;隐含下标数组语句隐含下标数组语句 隐含下标数组由一个数组名字,一个下标一个下标变量变量和列表名组成。语句格式:ARRAYarray-nameArray-elements;选项说
12、明:例9.14定义字符数组。dataa;inputx1$3.x2$3.;arrayitem(j)$12x1-x10;例中,定义字符数组ITEM,前两个元素x1和x2,长度为3,它们在INPUT语句里定义了。其它8个元素在ARRAY语句里用长度说明选项,给出长度为12。例9.15规定组成数组的元素。Input(x1-x3)($8.)x4x5;Arrayitem_character_;例中,INPUT语句用输入格式$8.读字符变量x1至x3,而x4和x5是数值变量。ARRAY语句使用特殊变量_character_只能引入字符变量到数组中。一个变量或一个隐含下标数组可以是多个隐含数组的元素。引用隐含
13、数组元素引用隐含数组元素 例9.16引用隐含下标数组的元素时,要先设置下标变量,然后在SAS语句中使用数组名字。dataa;inputidx1-x10y1-y10;arraybig(i)x1-x10y1-y10;i=11;putbig;cards;915511111111112222222222;例中,输出隐含数组BIG中的第11个元素值。504dataa;505inputidx1-x10y1-y10;506arraybig(i)x1-x10y1-y10;507i=11;508putbig;509cards;2NOTE:数据集WORK.A有1个观测和22个变量。NOTE:“DATA语句”所用时
14、间(总处理时间):实际时间0.01秒CPU时间0.01秒511;例9.17循环DO组中引用。datatest;inputs1-s5;arrayss1-s5;/*array语句里没有规定下标变量*/do_i_=1to5;/*使用自动变量_i_作为下标变量*/s=s*100;end;cards;.95.88.57.90.65.95.88.57.90.65.95.88.57.90.65.95.88.57.90.65;run;例中,s1到s5中的每个变量值都乘以100.例9.18DOOVER组中引用。datatwo;inputidx1-x10y1-y10;arraybig(i)x1-x10y1-y10
15、;dooverbig;/*等价于doI=1to20;其中20是big中元素的个数。*/ifbig=.Thenbig=0;end;cards;例中,将数组BIG中的所有缺失值改为0。例9.21使用一些数组作为另一些数组的元素。dataa;arraytest1t1q1-t1q10;arraytest2t2q1-t2q10;arraytest3t3q1-t3q10;arrayans(k)test1-test3;inputt1q1-t1q10t2q1-t2q10t3q1-t3q10;dok=1to3;doj=1to10;ifans=.thenans=0;end;end;cards;例中,有一组数据,包
16、括三组测验题,每组又有十个问题。每个学生的测验数据包括30个答案。在DATA步使用ARRAY语句可以把这30个答案中的缺失值改变为0.例9.22使用DOOVER语句处理上例。dooverans;doovertest1;ifans=.Thenans=0;end;end;由于test1,test2,test3维数相同,在内层doover语句中规定的数组名可以是这三个数组名的任一个。只有当嵌套的DOOVER语句引用的每个数组定义不同的下标变量时才能使用嵌套DOOVER语句。INFORMAT语句语句 INFORMAT语句把输入格式与变量联系起来。语句格式:INFORMATvariables;选项说明:
17、选项DEFAULT可以出现在INFORMAT语句中的任何位置,仅适用于当前的DATA步。没有规定临时的缺省输入格式时,使用SAS系统规定的缺省输入格式。例9.23规定临时的缺省输入格式。dataa;informatdefault=3.1default=$char4.;inputx1-x5name$;putx1-x5name;cards;11223344100johnny;run;程序提交后LOG窗口输出显示:1.12.23.34.410John例中,在INPUT语句列出的变量X1-X5和NAME没有规定输入格式,那么使用这里规定的缺省输入格式,即用格式3.1输入X1-X5,用格式$char4.
18、输入NAME.例9.23取消已存在的输入格式。dataa;setResDat.idx000001;informatdate;run;例中,删除变量DATE的输入格式。这里INFORMAT和SET语句的次序是重要的。FORMAT语句语句 语句格式:FORMATvariables;选项说明:选项DEFAULT可以出现在FORMAT语句中的任何位置,仅适用于当前的DATA步。没有规定临时的缺省输出格式时,使用SAS系统规定的缺省输入格式。例9.25规定临时的缺省输出格式。data;formatw$3.y10.3default=8.2default=$8.;w=goodmorning.;x=goodm
19、orning.;y=12.1;z=12.1;putw/x/y/z;run;程序提交后LOG窗口输出:googoodmor12.10012.10例9.27规定日期时间变量的输出格式。dataa;inputname$bdatedate7.;formatbdateworddate.;cards;jimmy15jan84cindy03mar85;procprint;run;如果没有FORMAT语句,表示日期变量date的值将用1960年1月1日和日期值之间的天数输出。因此,对于SAS日期时间值变量,必须用FORMAT语句对变量指定相应的日期时间输出格式,这样才能便于理解。Obsnamebdate1ji
20、mmyJanuary15,19842cindyMarch3,1985LENGTH语句语句 LENGTH语句用于规定存贮变量值的字节长度。语句格式LENGTHvariable-specification-1;其中:variable-specification变量说明项;DEFAULT=n规定新创建数值变量值的缺省字节长度从8改为n值。variable-specification选项的格式选项的格式 变量说明项格式:variable-1length相关选项说明:控制变量长度方法控制变量长度方法 用LENGTH语句或ATTRIB语句都可以指定变量的长度。任意一个用LENGTH语句规定的长度可以用AT
21、TRIB语句改变它,反之亦然。变量的长度依赖于:是数值还是字符变量;变量是如何创建的;有没有LENGTH或ATTRIB语句。数值变量长度控制数值变量长度控制 在SAS数据集中数值变量的存贮长度一般为8个字节(byte)。然而很多值可以用小于8个字节的长度准确地表示。当数据集很大时,使用小于8个字节长度来存贮不需要很精确的值时,可以有效地减少外部存贮的要求。注意:用LENGTH语句截短数据时,可能会引起误差。例9.28截短数据引起的误差问题。dataone;inputa1-4b6.;lengthdefault=3;cards;1.461.251.141.341.351.362.03;datatw
22、o;setone;ifa=1.3;run;例中,数据集TWO中没有观测。因为,第二个DATA步的子集IF语句中的常数1.3用8个字节表示,而数据集ONE中变量A按LENGTH语句规定只有3个字节,因此A不会等于1.3.字符变量长度控制字符变量长度控制 如果不用LENGTH或ATTRIB语句规定变量的长度,字符变量的缺省长由它的第一个观测值决定,这样,后面更长的观测值会被截短。因INPUT语句可隐含地说明字符变量的长度。所以,当LENGTH语句定义的字符长度不同于在INPUT语句中隐含表示的长度时,LENGTH语句应放在INPUT语句前面。例9.29LENGTH语句必须放在INPUT语句前面才能
23、起作用。dataa;lengthname$20;inputname$1-10;cards;(数据行);run;例中,INPUT语句隐含指定变量NAME的长度为10。LENGTH语句(放在INPUT语句前面)给出在创建的数据集A中NAME的长度用20替代10。例9.30字符变量的长由它的第一个观测值决定。datab;inputx;ifx=1theny=no;elsey=yes;Cards;15;run;例中,字符变量Y第一次在赋值语句Y=NO中出现时,它的长度被确定为2。于是,当把YES赋给Y时,仅前两个字符被存储,S丢失了。为解决该问题,或者使用LENGTH语句规定Y的长度,或者重新排列语句顺
24、序。xy11no25yeLENGTH语句位置的重要性语句位置的重要性 改变字字符符变变量量的长度时,LENGTH语句必须放在SET语句的前面;改变数值变量数值变量的长度时,LENGTH语句可以放在任何地方。例9.30SET语句之后的LENGTH语句对字符变量不起作用。dataa;lstknm=深发展;datab;lstknm=大秦铁路;datac;setab;lengthlstknm$12;proc print;run;例中,length语句放在set语句之后不起作用,lstknm的长度为6,所以显示的值分别为深发展和大秦铁。Obslstknm1深发展2大秦铁上段程序的正确写法:dataa;l
25、stknm=深发展;datab;lstknm=大秦铁路;datac;lengthlstknm$12;/*length语句放在set语句之前*/setab;proc print;/*显示正确结果*/run;Obslstknm1深发展2大秦铁路LABEL语句语句 LABEL语句用于为变量加标签。变量标签是对变量的进一步说明,看到标签就能理解变量的意思。这个标签在SAS数据集中同变量名一起被存贮,而且可通过许多SAS过程被打印输出。语句格式:LABEL variable-1=label-1;其中:Variable规定加标签的变量名;Label规定最多40个字符的标签。一个标签语句可以出现若干个变量名
26、和标签。例9.32Label语句的两种写法。第一种写法:Labelscode=交易所用代码|stockcodebyexchangehstocd=最新股票代码|stockcodeshrsdt=观测日|sharesoutstandingobservationdateshrout=观测到的b股股本|bsharesoutstanding;第二种写法:labelscode=交易所用代码|stockcodebyexchangelabelhstocd=最新股票代码|stockcodelabelshrsdt=观测日|sharesoutstandingobservationdatelabelshrout=观测到
27、的b股股本|bsharesoutstanding;例9.33删除变量的标签。Labelscode=hstocd=shrsdt=shrout=;ATTRIB语句语句 ATTARIB语句用于规定多个变量的输出格式,输入格式,标签和长度。语句格式ATTRIBvariable-list-1attribute-list-1;其中:variable-list规定要定义属性的变量列表;attribute-list规定变量属性列表。可以规定的变量属性可以规定的变量属性 ATTRIB语句可以规定的变量属性有:FORMATformat规定输出格式;INFORMAT=informat规定输入格式;LABEL=lab
28、el规定标签;LENGTH=length规定长度。字符变量前面加$。ATTRIB语 句 永 久 地 为 变 量 规 定 了 属 性。可 以 用FORMAT,INFORMAT,LABEL,和LENGTH语句来指定变量的属性。用ATTRIB语句指定的任何属性都可以用多个属性的语句改变它,反之亦然。应用举例应用举例 例9.34对单个变量定义一种属性。attribscodelength=$6;例9.35对单个变量定义多种属性。attribdateinformat=mmddyy.Format=worddate.;例9.36对多个变量定义相同的多种属性。attribS1S2S3length=$4label
29、=SCORE;例9.37对多个变量定义不同的多种属性。attribSlength=$4label=SCOREdateinformat=mmddyy.Format=worddate.label=TESTDATE;例9.38对变量列表定义一种属性。attribmonth1-month12label=MONTHLYSALES;变量后面几种属性选项的次序是任意的。DROP语句语句 DROP语句规定输出数据集中要删除的变量,它对DATA步正在创建的所有SAS数据集都适用。语句格式:DROPvariable-list;其中:varible-list规定输出数据集中要删除的变量。例9.39 Drop语句与数
30、据集中的drop=选项。dataa;setResDat.class;dropsexage;/*drop语句*/procprint;run;dataa(drop=sexage);/*数据集中的drop=选项*/setResDat.class;procprint;run;例中,两段程序的效果相同。DROP语句告诉SAS系统新建数据集A中将删除SEX和AGE两个变量。KEEP语句语句 KEEP语句规定输出数据中要保留的变量,它对DATA步正在创建的所有SAS数据集都适用。语句格式:KEEPvariable-list;其中:variable-list规定输出数据集中要保留的变量。例9.40Keep语句
31、与数据集中的keep=选项。dataa;setResDat.idx000001;keepdateclpr;/*keep语句*/procprintdata=a(obs=10);run;dataa(keep=dateclpr);/*数据集中的keep=选项*/setResDat.idx000001;procprintdata=a(obs=10);run;DROP和和KEEP语句使用规则语句使用规则 同一个DATA步不用同时使用DROP和KEEP语句;RENAME语句和KEEP或DROP语句一起使用时,KEEP语句和DROP语句会首先起作用。即,在KEEP语句或DROP语句中使用是旧名字。例9.41
32、RENAME语句和KEEP语句一起使用时,KEEP语句使用旧变量名时程序运行正常,keep语句使用新变量名时程序运行出错。dataa;setResDat.Idx000001;keepdateclpr;/*使用旧变量名,程序运行正常*/renameclpr=clpr_SH;run;dataa;setResDat.Idx000001;keepdateclpr_SH;/*使用新变量名,程序不能正常运行*/renameclpr=clpr_SH;run;WARNING:从未引用过DROP、KEEP或RENAME列表中的变量clpr_SH。WARNING:从未引用过DROP、KEEP或RENAME列表中的
33、变量clpr。NOTE:从数据集RESDAT.IDX000001读取了3891个观测。NOTE:数据集WORK.A有3891个观测和1个变量。数据集选项数据集选项DROP=和和KEEP=使用规则使用规则 数据集选项drop=和keep=的使用规则基本同drop和keep语句的使用规则。但更灵活,实现同样的功能,对于不同的数据集,新旧名的使用规则也不同。RENAME语句语句 RENAME语句可以更改多个变量的名字。语句格式:RENAMEold-name-1=new-name-1;其中:old-name规定输入数据集中出现的变量名字;new-name规定变量的新名字。由于变量的新名字在输出的数据集
34、中才起作用,所以,在当前DATA步的程序语句须使用老名字。例9.45应用举例。dataa(keep=dateopenlowhighclose);setResDat.Idx000001;renameoppr=openlopr=lowhipr=highclpr=close;procprintdata=a(obs=3);run;RETAIN语句语句 RETAIN语句来规定单个变量,变量列表,或数组元素的初始值。语句格式:RETAINelement-list-1element-list-n;选项说明:例9.46没有选项时,规定用INPUT语句或赋值语句创建的所有变量值从DATA步的这次执行到下一次重复
35、时被保留。于是数据值在一些观测中可能保留了本应为缺失值的其它值。dataa;inputid;retain;ifid=1thentest=pass;ifid=2thentest=fail;cards;1222351531;procprintnoobs;run;打印输出结果为:例中,当ID的值为1或2时,都是对的。但当ID等于1和2以外的值时,没有一个IF条件是真的,故TEST没有接收新的值。由于有RETAIN语句,所以,TEST就保持从上一观测中得到的值,这样就产生错误。若从这段程序删除RETAIN语句,当ID值不等于1或2时TEST的值为空格(缺失值).dataa;打印输出结果为:inputi
36、d;ifid=1thentest=pass;ifid=2thentest=fail;cards;1222351531;procprintnoobs;run;用_ALL_,_CHAR_或_NUMERIC_规定变量列表时,只有在RETAIN语句之前定义的变量才有效。第第11章章 全局通用语句全局通用语句清华大学经管学院清华大学经管学院 朱世武朱世武ZResdat样本数据:样本数据:SAS论坛:论坛:v全局通用语句是可以用在任何地方的SAS语句。这些语句既可以用在数据步(DATA步),也可以用在过程步(PROC步),甚至还可以单独使用。注释语句注释语句 v注释语句可以放在SAS程序的任何地方作为程序
37、的说明,或者介绍整个程序的步骤或算法等。语句格式格式一:*message;信息的长度可任意,但不能包含分号(;),最后的分号表示信息结束。格式二:/*message*/中间的信息可以包含分号,但这种形式的注释不能嵌套。应用举例应用举例 例11.1注释语句应用。procprintdata=ResDat.stk000002(obs=10)noobs;/*输出前10个观测,不输出观测序号*/varopprhiprloprclpr;title股票行情;run;procmeansdata=ResDat.stk000002;*对数据集ResDat.stk000002使用means过程;varopprhip
38、rloprclpr;/*输出变量opprhiprloprclpr的均值*/run;例11.2标准SAS程序开头,记录SAS程序信息的注释形式。/*-*/*-BeginEstimationforGrunfeldsInvestmentModels-*/*-SeeSAS/ETSUsersGuide,Version5Edition,-*/*-pages-*/*-*/X语句语句 运行SAS系统时,发布主机操作系统命令。语句格式:X;其中:command规定主机操作系统的命令。例11.8应用举例。xmkdird:ResDat1;libnameResDat1d:ResDat1;dataResDat1.cla
39、ss;setResDat.class;run;例中,在SAS会话期间用主机操作系统命令创建一个目录D:ResDat_3.注意:键入EXIT命令退出操作系统返回到SAS会话。TITLE语句语句 TITLE语句规定SAS输出文件和其它SAS输出标题。每一个TITLE语规定一级标题,最多可规定10级标题。语句格式:TITLE;其中:n紧跟在词TIILE后面(不能有空格)的数字,用来规定标题的级别;text规定标题的内容。规定标题的内容一直有效,但可以重新规定或取消。例11.9只规定第1和第5级标题的内容时,中间标题为空白。titlethisisthe1thtitleline;title5thisis
40、the5thtitleline;例11.10取消所有标题内容。title;例11.11取消第3级及以后的所有标题内容。title3;FOOTNOTE语句语句 FOOTNOTE语句在每一页的底部输出一些脚注行。最多可产生10个脚注行。语句格式:FOOTNOTE;其中:n紧跟在词FOOTNOTE后面(不能有空格)的数字,用来规定脚注的行号;text规定脚注行的内容。规定的脚注行内容将输出在所有过程的输出页上,但可以重新规定或取消。例11.12规定脚注。footnote清华大学金融系;例11.13取消所有已规定的脚注行。footnote;例11.14取消第3个及以后的所有脚注行。footnote3;
41、RUN语句语句 RUN语句使SAS程序被执行。语句格式:RUN;其中:CANCEL让SAS系统结束当前步的执行。SAS将输出一个信息说明这一步没有执行。但CANECL选项不能阻止包含CARDS或CARDS4语句的DATA步执行。例11.15不能省略RUN语句的情况。titleusingprocmeans;procmeansdata=ResDat.classminmax;varageheightweight;run;/*此RUN语不能省略省略RUN语句*/titleusingprocplot;procplotdata=ResDat.class;plotage*height;run;例中,第一个R
42、UN语句在读第二个TITLE语之前执行PROCMEANS步。如果省略第一个RUN语,SAS系统在它读PROCPLOT语句之后执行PROCMEANS步。这时第二个TITLE语覆盖第一个TITLE语,也就是两个过程的输出都包含了标题USINGPROCPLOT。所以,这种情况下,第一个RUN语不能省略。usingprocplot17MEANS过程变量最小值最大值-Age11.000000016.0000000Height51.300000072.0000000Weight50.5000000150.0000000-usingprocmeans16MEANS过程变量最小值最大值-Age11.00000
43、0016.0000000Height51.300000072.0000000Weight50.5000000150.0000000-不省略run省略run例11.16使用选项CANCEL。procmeansdata=ResDat.idx000001;varclprX;/*注意数据集中没有变量X*/runcancel;例中,当发现SAS程序有错误不能运行这一段序时,使用选项CANCEL结束当前步的执行。LIBNAME语句语句 vLIBNAME语句定义SAS逻辑库。vLIBNAME语句把一个libref(库标记名)和一个目录名联系起来,使用户可在SAS语句中使用库标记来指示这个目录。语句格式LIB
44、NAMElibref;LIBNAMElibrefClear;LIBNAMElibref|_All_List;三种格式反映了LIBNAME语句的三种用法。选项说明应用举例应用举例 例11.18LIBNAME规定不同引擎的逻辑库。libnameSASDB1tapeSAS-data-library;/*规定一个TAPE引擎*/libnameSASDB2V6SAS-data-library;/*规定版本为V6引擎*/libnameSASDB3ODBCSAS-data-library;/*规定版本为ODBC引擎*/例11.19不同引擎的逻辑库数据集的转换。libnameResDatv6v6D:ResDa
45、t;dataResDatv6.class;setResDat.class;run;例11.20对已经存在的逻辑库使用LIBNAME语句联系一个SAS引擎。libnameSASDB3ODBC;例11.21一个物理地址联系两个库标记。libnameResDat1D:ResDat;libnameResDat2D:ResDat;run;例11.23脱离与库标记的联系。LIBNAMElibrefCLEAR;例11.24列出逻辑库的属性。libnameResDatlist;/*列出逻辑库ResDat的属性*/libname_all_list;/*列出所有逻辑库的属性*/run;例11.25多个物理地址指定
46、一个逻辑库。libnamenew(d:resdatd:resstk);例11.26多个不同的逻辑库组成一个逻辑库。libnamenew(resdatresstk);FILENAME语句语句 vFILENAME语句把SAS的文件标记与外部文件的全名或输出设备联系起来。v用INFILE,FILE,或%INCLUDE语句中调用SAS文件前,要先使用FILENAME语句来定义文件。v用户可以把一个文件标记同单个外部文件建立联系,也可以很多外部文件建立联系。v文件标记和文件名字之间的联系只保持在SAS会话期间,或下一个FILENAME语句再定义前。语句格式语句格式 建立文件标记与外部文件的联系:FILE
47、NAMEfilerefexternal-file;清除文件标记与外部文件的联系:FILENAMEfileref|_ALL_CLEAR;建立文件标记与某个输出设备的联系:FILENAMEfilerefdevice-type;列出外部文件的属性:FILENAMEfileref|_ALL_LIST;其它格式:FILENAMEfilerefCATALOGcatalog;FILENAMEfilerefFTPexternal-file;FILENAMEfilerefSOCKETexternal-file;FILENAMEfilerefSOCKET:portnoSERVER;选项说明选项说明 部分选项说明:
48、设备类型(DEVICE-TYPE)应用举例应用举例 例例11.2911.29读入外部文件创建SAS数据集。filenamedelinfod:resdatdelinfo.txt;datadelinfo(label=退市信息|delistinformation);formatstkcd$6.lstknm$12.lstdtyymmdd10.delistdtyymmdd10.exchflg$1.stktype$1.;informatstkcd$6.lstknm$12.lstdtyymmdd10.delistdtyymmdd10.exchflg$1.stktype$1.;labelstkcd=股票代码|
49、stockcodelstknm=最新股票名称|lateststocknamelstdt=股票上市日|listdatedelistdt=退市日期|delistdateexchflg=交易所标识|exchangeflagstktype=股票类型|stocktype;infiledelinfodelimiter=09xmissoverdsdfirstobs=2;inputstkcd$6.lstknm$12.lstdtyymmdd10.delistdtyymmdd10.exchflgstktype1.;run;例中,用文件标记delinfo识别外部文件(d:resdatdelinfo.txt),读取其
50、中的数据行,创建一个临时数据集delinfo.例11.34将逻辑库的所有文件传送到一个压缩文件。filenameResDatd:ResDatResDat;proccportlibrary=ResDatfile=ResDatmemtype=data;run;例中,将SAS逻辑库ResDat下的所有数据集传送到压缩文件ResDat中。例11.35恢复将传送压缩为一个逻辑库。libnameResDat_0d:ResDat_0;proccimportlibrary=ResDat_0infile=ResDat;run;例中,恢复由CPORT过程生成的传送压缩文件ResDat为原来的形式。MISSING语