《SAS统计软件数据步变量与变量属性控制.ppt》由会员分享,可在线阅读,更多相关《SAS统计软件数据步变量与变量属性控制.ppt(95页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、本章内容本章内容本章介绍利用数据步变量与信息控制语句进行数据加工整理。数据步变量与信息控制语句规定数据集中变量个数及相关信息。变量与信息控制语句不是执行语句,可以出现数据步的任何地方,且功能相同。 ARRAY语句语句 ARRAY语句用于定义数组。数组通常由一组变量构成。利用数组可以简化很多复杂的数据处理过程。 SAS系统引用数组等价引用构成数组的那一组变量。 显式下标数组语句显式下标数组语句 显式下标数组显式下标数组由数组名,元素个数说明,及元素列表等构成。通过数组名引用整个数组,通过数组元素序号(也称为下标)引用该元素。 语句格式 ARRAY array-namesubscript;选项说明
2、: 下标的三种格式下标的三种格式 下标用于表示数组中元素的个数和排列的范围。括号可用大括号,中括号或圆括号。 下标格式有三种: 数值-1规定数组中每一维的元素个数上界,上界规定数组中每一维的上下界*由规定数组中变量的个数来确定下标例9.1 用格式一定义一维、二维数组。Array simple3 red, green, yellow; /*定义一维数组 */例中,数组名为simple,数组有三个元素,对应的变量命名分别为red, green, yellow. Array x5,3scorel-score15; /*定义二维数组 */例中,数组名为X,15个变量scorel-score15按顺序从
3、左上角开始逐行放入这个二维数组。 例9.2 用格式二定义二维数组。Array x1:5,1:3scorel-score15;当用1作为数组下界时可以省略。注意:用0作为下界时,可以加快处理时间,因为计算下标的时间减少了。 数组元素表示方法数组元素表示方法 数组元素必须全是数值变量,或全是字符变量,可以用任意顺序列出。 数组元素的两种表示方法: 列出变量名; 建立临时数组元素列表。 例9.3 列出变量名。Array C3 Cl-C3;Array C3; /*和上例句等价 */Array A* _NUMERIC_ ; Array A* _CHARACTER_;建立临时数组元素列表:建立临时数组元素
4、列表: _TEMPORARY_;使用临时数组元素列表可以少占用内存,加快执行时间。可以像使用DATA步中变量那样使用临时数组元素,但要注意有下面几点不同: 它们没有名字,引用时必须用数组名和下标; 不能出现在输出的数据集上; 不能用特殊下标(*)来引用所有元素; 临时数组元素的值被自动保存,而不是像DATA步中的变量,在下一次重复开始时被置为缺失值。 例9.4 建立临时数组元素。若用如下程序,则会产生新变量t1,t2,t3;data a;set ResDat.class;array t(3) (5,10,15);run;若用临时数组,则不会产生新变量data a;set ResDat.clas
5、s;array t(3) _temporary_ (5,10,15);run;NameSexAgeHeight Weight t1 t2 t3AliceF1356.58451015BarbaraF1365.39851015CarolF1462.8102.551015JaneF1259.884.551015JanetF1562.5112.551015JoyceF1151.350.551015使用临时数组不用临时数组NameSexAgeHeight WeightAliceF1356.584BarbaraF1365.398CarolF1462.8102.5JaneF1259.884.5JanetF1
6、562.5112.5JoyceF1151.350.5初始值表示方法初始值表示方法 例9.5 数组元素和初值通过对应位置来确定。array test (3) t1 t2 t3 (90 80 70);array ab(5) (5 4 3);例中,第一个语句数组元素的个数与初值的个数相同,把初值90,80和70依次赋给变量t1,t1和t3。第二个语句分配5给ab1,4给ab2,3给ab3,因数组元素比给出的初始值多,多余的变量ab4和ab5为缺失值,而且SAS系统将发布一个警告信息。 应用举例应用举例 例9.6 定义数组例句。array rain5 x1-x5;array ab(*)x y z;ar
7、ray x*_numeric_;array test(3)_temporary_(90 80 70);array days7 d1-d7;array x2:5green red denato fetzer;array test (3:4,3:7) test1-test10;引用显式下标数组元素引用显式下标数组元素 凡是可用表达式的地方,都可以使用数组元素。 例9.7 通过下标引用数组元素。data new;input qa1-qa10 qb1-qb10;array test10 qa1-qa5 qb1-qb5;put test4= test6=;cards;1 1 1 6 1 1 1 1 1
8、1 8 2 2 2 2 2 2 2 2 2;例中,输出qa1和qb1的值,即数组元素test(4)引用qa4, 数组元素test(6)引用qb1.一个数组的定义仅在当前的DATA步有效。如果想在几个DATA步引用同一个数组,必须在每个DATA步中都定义这个数组。 455 data new;456 input qa1-qa10 qb1-qb10;457 array test10 qa1-qa5 qb1-qb5;458 put test4= test6=;459 cards;qa4=6 qb1=8NOTE: 数据集 WORK.NEW 有 1 个观测和 20 个变量。NOTE: “DATA 语句”所
9、用时间(总处理时间): 实际时间 0.01 秒 CPU 时间 0.01 秒461 ;例9.9 规定数组的一些特殊元素作为循环DO语句范围。array day(7) d1-d7;do i=2 to 4;do i=1 to 7 by 2;do i=1,3;例中,处理数组DAY中选定的一些特殊元素。 循环循环DO组中引用组中引用 例9.10 一个循环DO组里处理多个数组。array day(*)d1-d4;do i=1 to dim(day);day(i)=day(i)+10;end;例中,循环DO语句里使用DIM函数得到数组中元素的个数。用DIM函数作为DO语句上界时,这个上界会根据数组元素个数的
10、实际情况自动调整,用DIM函数作为DO语句上界的所有语句都不必改动。 例9.10 引用规定上下界的一维数组。Array yrs76:85 year76-year85;do i=76 to 85 ;if yrs(i)=9 then yrs(i)=.;end;do i=lbound(yrs) to hbound(yrs);if yrs(i)=9 then yrs(i)=.;end;例中,两个DO组是等价的。第二个DO组中LBOUND函数取数组YRS的下界,而HBOUND函数取YRS的上界。 DO WHILE和和DO UNTIL组引用组引用 使用DO WHILE或DO UNTIL语句处理数组时,首先
11、要创造循环变量,然后利用数组说明实现DO WHILE或DO UNTIL语句的条件,最后使用程序语句来改变循环变量的值。 例9.13 DO WHILE语句用法。data test;input x1-x5 y;array t(5) x1-x5;i=1;do while (t(i)y);put t(i)= y=;i=i+1;end;cards;1 2 3 4 5 30 2 4 6 8 6;run;482 data test;483 input x1-x5 y;484 array t(5) x1-x5;485 i=1;486 do while (t(i)y);487 put t(i)= y=;488
12、i=i+1;489 end;490 cards;x1=1 y=3x2=2 y=3x1=0 y=6x2=2 y=6x3=4 y=6NOTE: 数据集 WORK.TEST 有 2 个观测和 7 个变量。NOTE: “DATA 语句”所用时间(总处理时间): 实际时间 0.01 秒 CPU 时间 0.00 秒493 ;494 run;隐含下标数组语句隐含下标数组语句 隐含下标数组由一个数组名字,一个下标一个下标变量变量和列表名组成。 语句格式:ARRAY array-name Array-elements ; 选项说明: 例9.14 定义字符数组。data a;input x1 $3.x2 $3.;
13、array item(j)$ 12 x1-x10;例中,定义字符数组ITEM,前两个元素x1和 x2,长度为3,它们在INPUT语句里定义了。其它8个元素在ARRAY语句里用长度说明选项,给出长度为12。 例9.15 规定组成数组的元素。Input (x1-x3) ($8.) x4 x5;Array item _character_;例中,INPUT语句用输入格式$8.读字符变量x1至x3,而x4和x5是数值变量。ARRAY语句使用特殊变量_character_只能引入字符变量到数组中。一个变量或一个隐含下标数组可以是多个隐含数组的元素。 引用隐含数组元素引用隐含数组元素 例9.16 引用隐含
14、下标数组的元素时,要先设置下标变量,然后在SAS语句中使用数组名字。data a;input id x1-x10 y1-y10;array big(i) x1-x10 y1-y10;i=11;put big;cards;9155 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2;例中,输出隐含数组BIG中的第11个元素值。 504 data a;505 input id x1-x10 y1-y10;506 array big(i) x1-x10 y1-y10;507 i=11;508 put big;509 cards;2NOTE: 数据集 WORK.A 有 1
15、个观测和 22 个变量。NOTE: “DATA 语句”所用时间(总处理时间): 实际时间 0.01 秒 CPU 时间 0.01 秒511 ;例9.17 循环DO组中引用。data test;input s1-s5;array s s1-s5; /* array语句里没有规定下标变量 */do _i_=1 to 5; /* 使用自动变量_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中的每个变量值都乘以10
16、0.例9.18 DO OVER组中引用。data two;input id x1-x10 y1-y10;array big(i) x1-x10 y1-y10;do over big; /*等价于do I=1 to 20;其中20是big中元素的个数。*/ if big=. Then big=0;end;cards;例中,将数组BIG中的所有缺失值改为0。 例9.21 使用一些数组作为另一些数组的元素。data a; array test1 t1q1-t1q10; array test2 t2q1-t2q10; array test3 t3q1-t3q10; array ans(k) test1
17、-test3; input t1q1-t1q10 t2q1-t2q10 t3q1-t3q10; do k=1 to 3; do j=1 to 10; if ans=. then ans=0; end; end;cards;例中,有一组数据,包括三组测验题,每组又有十个问题。每个学生的测验数据包括30个答案。在DATA步使用ARRAY语句可以把这30个答案中的缺失值改变为0.例9.22 使用DO OVER语句处理上例。do over ans; do over test1; if ans=. Then ans=0; end;end;由于test1, test2, test3维数相同,在内层do o
18、ver语句中规定的数组名可以是这三个数组名的任一个。只有当嵌套的DO OVER语句引用的每个数组定义不同的下标变量时才能使用嵌套DO OVER语句。 INFORMAT语句语句 INFORMAT语句把输入格式与变量联系起来。 语句格式:INFORMAT variables ; 选项说明: 选项DEFAULT可以出现在INFORMAT语句中的任何位置,仅适用于当前的DATA步。没有规定临时的缺省输入格式时,使用SAS系统规定的缺省输入格式。 Variables规定同输入格式联系的变量名Informat规定读入变量值时使用的输入格式Default=规定临时的缺省输入格式例9.23 规定临时的缺省输入
19、格式。data a;informat default=3.1 default=$char4.;input x1-x5 name $;put x1-x5 name;cards;11 22 33 44 100 johnny;run;程序提交后LOG窗口输出显示:1.1 2.2 3.3 4.4 10 John 例中,在INPUT语句列出的变量X1-X5和NAME没有规定输入格式,那么使用这里规定的缺省输入格式,即用格式3.1输入X1-X5,用格式$char4.输入NAME.例9.23 取消已存在的输入格式。data a;set ResDat.idx000001;informat date;run;例
20、中,删除变量DATE的输入格式。这里INFORMAT和SET语句的次序是重要的。 FORMAT语句语句 语句格式:FORMAT variables ; 选项说明:选项DEFAULT可以出现在FORMAT语句中的任何位置,仅适用于当前的DATA步。没有规定临时的缺省输出格式时,使用SAS系统规定的缺省输入格式。 Variables规定同输出格式联系的变量名Format规定输出变量值时使用的输出格式Default=规定临时的缺省输出格式例9.25 规定临时的缺省输出格式。data ;format w $ 3. y 10.3 default=8.2 default=$8.; w=good morni
21、ng.; x=good morning.;y=12.1; z=12.1;put w/x/y/z;run;程序提交后LOG窗口输出:googood mor12.10012.10例9.27 规定日期时间变量的输出格式。data a;input name $ bdate date7.;format bdate worddate.;cards;jimmy 15jan84cindy 03mar85;proc print;run;如果没有FORMAT语句,表示日期变量date的值将用1960年1月1日和日期值之间的天数输出。因此,对于SAS日期时间值变量,必须用FORMAT语句对变量指定相应的日期时间输出
22、格式,这样才能便于理解。 Obs name bdate1 jimmy January 15, 19842 cindy March 3, 1985LENGTH语句语句 LENGTH语句用于规定存贮变量值的字节长度。语句格式 LENGTHvariable-specification-1 ;其中: variable-specification变量说明项; DEFAULT=n规定新创建数值变量值的缺省字节长度从8改为n值。 variable-specification选项的格式选项的格式 变量说明项格式:variable-1length 相关选项说明: 控制变量长度方法控制变量长度方法 用LENGTH
23、语句或ATTRIB语句都可以指定变量的长度。任意一个用LENGTH语句规定的长度可以用ATTRIB语句改变它,反之亦然。 变量的长度依赖于: 是数值还是字符变量; 变量是如何创建的; 有没有LENGTH或ATTRIB语句。 数值变量长度控制数值变量长度控制 在SAS数据集中数值变量的存贮长度一般为8个字节(byte)。然而很多值可以用小于8个字节的长度准确地表示。当数据集很大时,使用小于8个字节长度来存贮不需要很精确的值时,可以有效地减少外部存贮的要求。注意:用LENGTH语句截短数据时,可能会引起误差。 例9.28 截短数据引起的误差问题。data one;input a 1-4 b 6.;
24、length default=3;cards;1.4 61.2 51.1 41.3 41.3 51.3 62.0 3;data two; set one; if a=1.3;run;例中,数据集TWO中没有观测。因为,第二个DATA步的子集IF语句中的常数1.3用8个字节表示, 而数据集ONE中变量A按LENGTH语句规定只有3个字节, 因此A不会等于1.3.字符变量长度控制字符变量长度控制 如果不用LENGTH或ATTRIB语句规定变量的长度,字符变量的缺省长由它的第一个观测值决定,这样,后面更长的观测值会被截短。因INPUT语句可隐含地说明字符变量的长度。所以,当LENGTH语句定义的字符
25、长度不同于在INPUT语句中隐含表示的长度时,LENGTH语句应放在INPUT语句前面。 例9.29 LENGTH语句必须放在INPUT语句前面才能起作用。data a;length name $20;input name $1-10;cards;(数据行);run;例中,INPUT语句隐含指定变量NAME的长度为10。LENGTH语句(放在INPUT语句前面)给出在创建的数据集A中NAME的长度用20替代10。例9.30 字符变量的长由它的第一个观测值决定。data b;input x;if x=1 then y=no;else y=yes;Cards;1 5;run;例中,字符变量Y第一次
26、在赋值语句Y=NO中出现时,它的长度被确定为2。于是,当把YES赋给Y时,仅前两个字符被存储,S丢失了。为解决该问题,或者使用LENGTH语句规定Y的长度,或者重新排列语句顺序。 xy11no25yeLENGTH语句位置的重要性语句位置的重要性 改变字符变量字符变量的长度时,LENGTH语句必须放在SET语句的前面; 改变数值变量数值变量的长度时,LENGTH语句可以放在任何地方。 例9.30 SET语句之后的LENGTH语句对字符变量不起作用。data a;lstknm=深发展;data b;lstknm=大秦铁路;data c;set a b;length lstknm $12 ; pro
27、c print; run;例中,length语句放在set语句之后不起作用,lstknm的长度为6,所以显示的值分别为深发展和大秦铁 。 Obs lstknm 1 深发展 2 大秦铁上段程序的正确写法:data a;lstknm=深发展;data b;lstknm=大秦铁路;data c;length lstknm $12 ; /*length语句放在set语句之前 */set a b;proc print; /*显示正确结果 */run; Obs lstknm 1 深发展 2 大秦铁路LABEL语句语句 LABEL语句用于为变量加标签。变量标签是对变量的进一步说明,看到标签就能理解变量的意思
28、。这个标签在SAS数据集中同变量名一起被存贮,而且可通过许多SAS过程被打印输出。 语句格式:LABEL variable-1=label-1 ;其中: Variable规定加标签的变量名; Label规定最多40个字符的标签。一个标签语句可以出现若干个变量名和标签。例9.32 Label语句的两种写法。第一种写法:Labelscode=交易所用代码|stock code by exchangehstocd=最新股票代码|stock codeshrsdt=观测日|shares outstanding observation dateshrout=观测到的b股股本|b shares outsta
29、nding;第二种写法:label scode=交易所用代码|stock code by exchangelabel hstocd=最新股票代码|stock codelabel shrsdt=观测日|shares outstanding observation datelabel shrout=观测到的b股股本|b shares outstanding;例9.33 删除变量的标签。Label scode= hstocd= shrsdt= shrout=;ATTRIB语句语句 ATTARIB语句用于规定多个变量的输出格式,输入格式,标签和长度。 语句格式 ATTRIB variable-list
30、-1 attribute-list-1;其中:variable-list规定要定义属性的变量列表;attribute-list规定变量属性列表。 可以规定的变量属性可以规定的变量属性 ATTRIB语句可以规定的变量属性有: FORMATformat规定输出格式; INFORMAT=informat规定输入格式; LABEL=label规定标签; LENGTH=length规定长度。字符变量前面加$。ATTRIB语句永久地为变量规定了属性。可以用FORMAT,INFORMAT,LABEL,和LENGTH语句来指定变量的属性。用ATTRIB语句指定的任何属性都可以用多个属性的语句改变它,反之亦然。
31、 应用举例应用举例 例9.34 对单个变量定义一种属性。attrib scode length=$6; 例9.35 对单个变量定义多种属性。attrib date informat=mmddyy. Format=worddate.; 例9.36 对多个变量定义相同的多种属性。attrib S1 S2 S3 length=$4 label=SCORE; 例9.37 对多个变量定义不同的多种属性。attrib S length=$ 4 label=SCORE date informat=mmddyy. Format=worddate. label=TEST DATE; 例9.38 对变量列表定义一
32、种属性。attrib month1-month12 label=MONTHLY SALES;变量后面几种属性选项的次序是任意的。 DROP语句语句 DROP语句规定输出数据集中要删除的变量,它对DATA步正在创建的所有SAS数据集都适用。 语句格式:DROP variable-list;其中:varible-list规定输出数据集中要删除的变量。 例9.39 Drop语句与数据集中的drop=选项 。data a;set ResDat.class;drop sex age; /* drop语句 */ proc print;run;data a (drop=sex age); /* 数据集中的d
33、rop=选项 */ set ResDat.class;proc print;run;例中,两段程序的效果相同。DROP语句告诉SAS系统新建数据集A中将删除SEX 和AGE两个变量。 KEEP语句语句 KEEP语句规定输出数据中要保留的变量,它对DATA步正在创建的所有SAS数据集都适用。 语句格式:KEEP variable-list;其中:variable-list规定输出数据集中要保留的变量。 例9.40 Keep语句与数据集中的keep=选项 。data a;set ResDat.idx000001;keep date clpr; /* keep语句 */ proc print dat
34、a=a (obs=10);run;data a (keep=date clpr); /* 数据集中的keep=选项 */set ResDat.idx000001;proc print data=a (obs=10);run;DROP和和KEEP语句使用规则语句使用规则 同一个DATA步不用同时使用DROP和KEEP语句; RENAME语句和KEEP或DROP语句一起使用时,KEEP语句和DROP语句会首先起作用。即,在KEEP语句或DROP语句中使用是旧名字。例9.41 RENAME语句和KEEP语句一起使用时,KEEP语句使用旧变量名时程序运行正常,keep语句使用新变量名时程序运行出错。d
35、ata a;set ResDat.Idx000001;keep date clpr; /* 使用旧变量名,程序运行正常 */rename clpr=clpr_SH;run; data a;set ResDat.Idx000001;keep date clpr_SH; /* 使用新变量名,程序不能正常运行 */rename clpr=clpr_SH;run;WARNING: 从未引用过 DROP、KEEP 或 RENAME 列表中的变量 clpr_SH。WARNING: 从未引用过 DROP、KEEP 或 RENAME 列表中的变量 clpr。NOTE: 从数据集 RESDAT.IDX00000
36、1 读取了 3891 个观测。NOTE: 数据集 WORK.A 有 3891 个观测和 1 个变量。数据集选项数据集选项DROP=和和KEEP=使用规则使用规则 数据集选项drop=和keep=的使用规则基本同drop和keep语句的使用规则。但更灵活,实现同样的功能,对于不同的数据集,新旧名的使用规则也不同 。RENAME语句语句 RENAME语句可以更改多个变量的名字。 语句格式:RENAME old-name-1=new-name-1 ;其中: old-name规定输入数据集中出现的变量名字; new-name规定变量的新名字。由于变量的新名字在输出的数据集中才起作用,所以,在当前DAT
37、A步的程序语句须使用老名字。例9.45 应用举例。data a (keep=date open low high close);set ResDat.Idx000001; rename oppr=open lopr=low hipr=high clpr=close; proc print data=a (obs=3);run;RETAIN语句语句 RETAIN语句来规定单个变量,变量列表,或数组元素的初始值。 语句格式:RETAINelement-list-1element-list-n; 选项说明:没有选项规定用INPUT语句或赋值语句创建的所有变量值从DATA步的这次执行到下一次重复时被保
38、留Element-List规定变量名字,变量列表或数组名Initial-Value列出RETAIN语句所规定变量的初始值Initial-Value-List 规定初始值列表例9.46 没有选项时,规定用INPUT语句或赋值语句创建的所有变量值从DATA步的这次执行到下一次重复时被保留。于是数据值在一些观测中可能保留了本应为缺失值的其它值。data a;input id ; retain;if id=1 then test=pass;if id=2 then test=fail;cards;1 2 2 2 3 5 1 5 3 1;proc print noobs;run;打印输出结果为:例中,当
39、ID的值为1或2时,都是对的。但当ID等于1和2以外的值时,没有一个IF条件是真的,故TEST没有接收新的值。由于有RETAIN语句,所以,TEST就保持从上一观测中得到的值,这样就产生错误。若从这段程序删除RETAIN语句,当ID值不等于1或2时TEST的值为空格(缺失值).IDTest1Pass2Fail2Fail2Fail3Fail5Fail1Pass5Pass3Pass1Passdata a; 打印输出结果为:input id ; if id=1 then test=pass;if id=2 then test=fail;cards;1 2 2 2 3 5 1 5 3 1;proc p
40、rint noobs;run;用_ALL_, _CHAR_或_NUMERIC_规定变量列表时,只有在RETAIN语句之前定义的变量才有效。IDTest1Pass2Fail2Fail2Fail351Pass531Pass第第11章章 全局通用语句全局通用语句清华大学经管学院清华大学经管学院 朱世武朱世武ZResdat样本数据:样本数据:SAS论坛:论坛: v 全局通用语句是可以用在任何地方的SAS语句。这些语句既可以用在数据步(DATA步),也可以用在过程步(PROC步),甚至还可以单独使用。 注释语句注释语句 v 注释语句可以放在SAS程序的任何地方作为程序的说明,或者介绍整个程序的步骤或算法
41、等。语句格式格式一:* message;信息的长度可任意,但不能包含分号(;),最后的分号表示信息结束。 格式二:/*message*/中间的信息可以包含分号,但这种形式的注释不能嵌套。应用举例应用举例 例11.1 注释语句应用。proc print data=ResDat.stk000002 (obs=10) noobs; /*输出前10个观测,不输出观测序号*/var oppr hipr lopr clpr;title股票行情;run;proc means data=ResDat.stk000002 ; *对数据集ResDat.stk000002使用means过程;var oppr hip
42、r lopr clpr; /*输出变量oppr hipr lopr clpr的均值*/run;例11.2 标准SAS程序开头,记录SAS程序信息的注释形式。/*-*/ /*- Begin Estimation for Grunfelds Investment Models -*/ /*- See SAS/ETS Users Guide, Version 5 Edition, -*/ /*- pages -*/ /*-*/ X语句语句 运行SAS系统时,发布主机操作系统命令。 语句格式:X ;其中:command规定主机操作系统的命令。 例11.8 应用举例。x mkdir d:ResDat1;
43、libname ResDat1 d:ResDat1;data ResDat1.class;set ResDat.class;run;例中,在SAS会话期间用主机操作系统命令创建一个目录D:ResDat_3.注意:键入EXIT命令退出操作系统返回到SAS会话。TITLE语句语句 TITLE语句规定SAS输出文件和其它SAS输出标题。每一个TITLE语规定一级标题,最多可规定10级标题。 语句格式:TITLE;其中: n紧跟在词TIILE后面(不能有空格)的数字,用来规定标题的级别; text规定标题的内容。规定标题的内容一直有效,但可以重新规定或取消。例11.9 只规定第1和第5级标题的内容时,
44、中间标题为空白。title this is the 1th title line;title5 this is the 5th title line; 例11.10 取消所有标题内容。title; 例11.11 取消第3级及以后的所有标题内容。title3;FOOTNOTE语句语句 FOOTNOTE语句在每一页的底部输出一些脚注行。最多可产生10个脚注行。 语句格式:FOOTNOTE;其中: n紧跟在词FOOTNOTE后面(不能有空格)的数字,用来规定脚注的行号; text规定脚注行的内容。规定的脚注行内容将输出在所有过程的输出页上,但可以重新规定或取消。例11.12 规定脚注。footnot
45、e 清华大学金融系; 例11.13 取消所有已规定的脚注行。footnote; 例11.14 取消第3个及以后的所有脚注行。footnote3; RUN语句语句 RUN语句使SAS程序被执行。 语句格式:RUN ;其中:CANCEL让SAS系统结束当前步的执行。SAS将输出一个信息说明这一步没有执行。但CANECL选项不能阻止包含CARDS或CARDS4语句的DATA步执行。例11.15 不能省略RUN语句的情况。title using proc means;proc means data=ResDat.class min max;var age height weight;run; /*此R
46、UN语不能省略省略RUN语句 */title using proc plot;proc plot data=ResDat.class;plot age*height;run;例中,第一个RUN语句在读第二个TITLE语之前执行PROC MEANS步。如果省略第一个RUN语,SAS系统在它读PROC PLOT语句之后执行PROC MEANS步。这时第二个TITLE语覆盖第一个TITLE语,也就是两个过程的输出都包含了标题USING PROC PLOT。所以,这种情况下,第一个RUN语不能省略。 using proc plot 17 MEANS 过程 变量 最小值 最大值 - Age 11.000
47、0000 16.0000000 Height 51.3000000 72.0000000 Weight 50.5000000 150.0000000 - using proc means 16 MEANS 过程 变量 最小值 最大值 - Age 11.0000000 16.0000000 Height 51.3000000 72.0000000 Weight 50.5000000 150.0000000 -不省略run省略run例11.16 使用选项CANCEL。proc means data=ResDat.idx000001;var clpr X; /*注意数据集中没有变量X */run c
48、ancel;例中,当发现SAS程序有错误不能运行这一段序时,使用选项CANCEL结束当前步的执行。LIBNAME语句语句 v LIBNAME语句定义SAS逻辑库。v LIBNAME语句把一个libref(库标记名)和一个目录名联系起来,使用户可在SAS语句中使用库标记来指示这个目录。语句格式 LIBNAME libref ;LIBNAME libref Clear;LIBNAME libref |_ All_ List;三种格式反映了LIBNAME语句的三种用法。选项说明 Libref规定逻辑库Engine规定引擎Sas-Data-Library规定主机系统下一个有效的物理地址Access=R
49、eadonly|Temp规定逻辑库为只读或可修改属性Clear清除与库标记的联系_All_列出所有逻辑库的属性List在Log窗口列出逻辑库的属性。应用举例应用举例 例11.18 LIBNAME规定不同引擎的逻辑库。libname SASDB1 tape SAS- data-library; /*规定一个TAPE引擎*/libname SASDB2 V6 SAS- data-library; /*规定版本为V6引擎*/libname SASDB3 ODBC SAS- data-library; /*规定版本为ODBC引擎*/ 例11.19 不同引擎的逻辑库数据集的转换。libname ResD
50、atv6 v6 D:ResDat;data ResDatv6.class;set ResDat.class;run; 例11.20 对已经存在的逻辑库使用LIBNAME语句联系一个SAS引擎。libname SASDB3 ODBC;例11.21 一个物理地址联系两个库标记。libname ResDat1 D:ResDat;libname ResDat2 D:ResDat;run; 例11.23 脱离与库标记的联系。LIBNAME libref CLEAR; 例11.24 列出逻辑库的属性。libname ResDat list; /*列出逻辑库ResDat的属性 */libname _all_