版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第3章 SAS编程基础本章内容提要3.1 SAS语法基础3.2 DATA步3.3 PROC步3.4 SAS语句编程练习例:Data sasuser.da1;input name$ X1 X2 X3;Y=X1+X2+X3;cards;M 3 1.3 0.5M 2 2.4 0.9F 5 3.2 0.8M 8 4.1 1.1F 7 3.3 0.6;Proc print data= sasuser.da1;run;SAS语言的基本单位是SAS语句,构成一个SAS语句由下面两种方式:一种是由关键词开始:每个SAS语句一般由一个关键字(如DATA、PROC、INPUT、CARDS、BY)开头,包含SAS名
2、字、特殊字符、运算符等,以分号结束;关键词:用于句首,说明语句的类型和功能;SAS名:SAS语句中出现的SAS名有很多种类,如SAS数据集库名、数据集名、变量名等。一种是SAS的表达式:SAS数据步程序中的计算用表达式完成,可以对变量作变换和赋值,创建新变量,计算新数值以及控制条件语句的运行等。表达式是把常量、变量用运算符、函数、括号连接起来得到一个计算结果的算式。3.1.1 SAS常数SAS常数是SAS系统可以识别的一些固定值。包括数值常数、字符常数和日期时间常数。1.数值常数数值常数包括小数点、负号及科学计数法中的E记号等。例:1, 5, 1.23, 1.2E232.字符常数字符常数是由引
3、号括起来的1-200个字符组成,如果字符常数本身带有引号,此时应再次用引号括起来。 例: name=TOM”S; name=”TOMS”; /*例中,两语句等价。*/3.1 SAS语法基础3.日期时间常数 表示日期(时间)的字符串(用单引号括起来)后跟一个表示日期的字母D/d或表示时间的字母T/t或表示日期时间的字母DT/dt,中间没有空格。例:1jan2000d; 9:25t; 18jan00:9:27:25dt。3.1.2 SAS变量1.数值型变量日期、时间等变量存为数值型,数值型变量在数据集中的存储一般使用8个字符。2.字符型变量字符型变量缺省的长度为8个字符,其后加符号$,变量名与$之
4、间可以相连也可以有一个空格。SAS中用一个小数点来表示缺失值。SAS操作符是一些符号,主要有算术操作符、比较操作符、逻辑操作符。1算术操作符(执行一种算术运算)+、-、*、/、*、|(字符串并接)2比较操作符(建立量变量之间的关系)LT、GT、EQ、LE、GE、NE 、 =、 =、 =3逻辑操作符(连接一系列比较式,常与if语句结合使用) AND、OR、NOT &、 |、 3.1.3 SAS操作符3.1.4 SAS函数1.SAS函数定义和表示SAS函数是SAS系统中编好的子程序,它对若干个变量进行计算后返回一个结果值。SAS提供了比一般程序设计语言多的标准函数,有数学函数、字符串函数、分布函数
5、、分位数函数、随机数函数、日期时间函数、财政金融函数等。SAS函数的形式:函数名(X1, X2, ):SUM(X1,X2,Y1,Y2)函数名(OF 变量1 变量N) :SUM(OF X1 X2 Y1 Y2)函数名(OF 变量1变量N): SUM(OF X1-X20)注意:两种写法不能混写,如SUM(OF X1,X2, X3)和SUM( X1-X3)都是错误的。用函数可以简化程序不使用SAS函数:total=xl+x2+x3+x4+x5+x6+x7+x8+x9+x10; if totaly then least=total; else least=y;使用SAS函数:leastmin(sum(o
6、f x1-x10),y).函数分类常用函数功能数学运算函数ABS( )取绝对值SQRT( )求平方根INT( )取整数部分EXP( )计数e的次幂LOG( )求e为底的自然对数SIN( )计算正弦LAGn( )求给定变量滞后为n的值统计计算函数MAX( )求最大值MIN( )求最小值MEAN( )求平均值SUM( )求和DIFn( )求给定变量X的第n阶差STD( )求标准差PROBNORM( )标准正态分布函数一些常见的SAS函数: 日期时间处理函数DATE( )/TODAY()取当日的日期值DAY( )计算某月的那一日HOUR( )计算小时TIME( )取当日的时间YEAR( )取年值字符
7、函数INDEX( )搜寻字符串的位置LEFT( )字符串表达式左对齐SUBSTR( )抽取子字符串TRIM( )移走尾部空格LENGTH( )给出字符变量的长度UPCASE( )转换为大写财政金融函数COMPOUND( )计算复利IRR( )计算内部赢利率NPV( )计算净现值概率函数: PROBNORM(X):标准正态分布函数,该函数计算服从标准正态分布的随机变量U小于给定X的概率; PROBCHI(x,df,nc):卡方分布函数。该函数计算服从自由度为df,非中心参数为nc的分布的随机变量小于给定X的概率。如果nc没有规定或取为0,那么被计算的就是中心分布。注意,自由度df允许是非整数.
8、PROBF(x, ndf, ddf,nc):F分布的分布函数,该函数计算服从分子自由度为ndf, 分母自由度为ddf,非中心参数为nc的F分布的随机变量小于给定值X的概率。如果nc没有规定或取为0,那么被计算的就是中心F分布。注意:自由度允许是非整数。 PROBT(x,df,nc):该函数计算服从自由度为df,非中心参数为nc的T分布的随机变量小于给定X的概率。如果nc没有规定或取为0,那么被计算的就是中心T分布。注意:自由度df允许是非整数。 PROBBNML(p,n,m):其中0=p=1,0=m,这个函数给出参数为p和n的二项分布随机变量X=240 then n+1;else delete
9、; Cards;82 78 69 90 78 89 79 86 98 76 56 80 72 76 81 69 78 91 92 71 85;proc print;run;3.2.3 OUTPUT语句和DELETE语句 、DROP、KEEP1.OUTPUT语句OUTPUT语句制定SAS系统输出当前的观测到指定的SAS数据集中。其一般格式是:output ;output后的括号中的数据集名是可选项。当没有该选项时,SAS系统把当前这个观测输出到DATA语句命名的所有数据集上,并返回到DATA步开始处理此后的语句。当有该选项时,SAS系统把当前这个观测输出到output语句规定的所有数据集上,并返
10、回到DATA步开始接着处理此后的语句。这里数据集名可以多于一个,但必须在DATA语句中已被命名。 data class1 class2; input name$ chinese maths english ; total=chinese+maths+english; if total=240 then output class1; else output class2; cards; a 82 78 69 b 90 78 89 c 79 86 98 ; proc print data=class1; title 数据集class1 ; proc print data=class2; title
11、 数据集class2 ; run; 2.DELETE语句DELETE语句把符合条件的观测从正在创建的数据集中删去,并返回到DATA步开始处理其他观测。如: Data class3; input sex$ chinese maths english ; If sex=“m” then delete; cards; m 82 78 69 f 90 78 89 m 79 86 98 ; proc print; run; 3.DROP和KEEP语句可以根据数据集的需要,选用和删除一些变量,此时可以使用这两个语句,格式为: DROP VARIABLES; KEEP VARIABLES; DROP=VAR
12、IABLES; KEEP=VARIABLES;由于DROP和KEEP语句的作用正好相反,使用DROP语句时也可以使用KEEP语句。实际中为了书写方便,在保留变量较少时,常用KEEP语句,而在删除变量较少时,使用DROP语句。语句选项 注意:在KEEP语句和DROP语句中,不加“=”,而在数据集后使用KEEP选项或DROP选项是需加“=”;变量之间用空格隔开;KEEP语句和DROP语句对当前正在创建的所有数据及均起作用,而在数据集后使用KEEP选项或DROP选项仅对在他前面的数据集有效,对其他数据集不起作用。例:data class4;input name$ chinese maths engl
13、ish ;keep name total;total=chinese+maths+english;cards;a 82 78 69 b 90 78 89 c 79 86 98;与data class4(keep= name total或drop=chinese maths english);input name$ chinese maths english ;total=chinese+maths+english;cards;a 82 78 69 b 90 78 89 c 79 86 98;结果是一样的3.2.4 WHERE语句WHERE语句是一个条件语句,它可以从已存在的SAS数据集中把满足
14、条件的观测输出到新的SAS数据集中,它不能用在由CARDS语句构成的DATA步中,也不能从包含原始数据的外部文件中选择记录。其一般格式是:WHERE where-expression;WHERE语句中的表达式where-expression是由一些列算符合操作数组成的一个算术或逻辑表达式,如: where total240; where x; where sex=“m”; where total in (257 263)在执行WHERE表达式时,SAS系统首先对第一个观测计算,根据其取值决定是否执行WHERE后的其它SAS语句:如果表达式计算的结果为真则执行,如果为假,则不执行而返回到DATA
15、开始继续处理第二个观测,直到所有观测都被处理完为止。数值型变量的名字如“X”可以单独出现在WHERE表达式中,如果该变量值为0或缺省,则该表达式运算结果为假,否则为真。例:data class ;input sex$ chinese maths english ;total=chinese+maths+english;cards;m 82 . 69 f 90 0 89 m 79 86 98;data class1;set class;where maths;run;proc print data=class1;run;Between-And算符:该算符选择变量值落在某个范围内的观测,范围的界限
16、可以是常数或表达式,其一般格式为:WHERE VARIABLE BETWEEN VAULE AND VAULE;如where score between 60 and 100Same And算符:除满足已选的条件外,还满足and后的条件的观测。 例3.9 data class ; input sex$ chinese maths english ; total=chinese+maths+english; cards; m 82 78 69 f 90 78 89 m 79 86 98 M 80 80 80 ; data class1; set class; where total180; wh
17、ere same and total240; run; proc print data=class1; run; SET语句:调用一个SAS系统已存在的数据集利用SET语句可以从一个已经存在的SAS数据集创建新的数据集,一般格式为:DATA new data-set-name;SET old data-set-name ;如: data class1; set class;SAS数据步的输出一般是数据集,除此之外,SAS也提供了一个PUT语句,该语句可以将输出结果显示在LOG窗口中。PUT语句在关键字后面列出要输出的各项,每一项可以是变量名或字符串,各项之间用空格隔开。3.2.5 PUT语句例
18、:data ;X=0.5;Y=sin(x);Put Sine function value of x is y;run;Sine function value of 0.5 is 0.4794255386;在PUT语句中使用“变量名=”来指定输出项可以显示带有变量名的输出结果,如可以把上面程序中的PUT语句改为:Put x= y=;X=0.5 y=0.4794255386PUT语句的输出结果默认情况下被输出到日志窗口,但在PUT语句之前用FILE语句可以改变PUT语句的输出目的地。如在PUT语句之前用file print;可以把PUT语句输出到输出窗口;在file 语句中指定一个包含文件名的字
19、符串可以把PUT语句的输出转向到此文件中。3.2.6用在DATA步中的控制语句 控制语句用来改变语句的运行顺序或对某些确定的观测跳过一些语句。1. IF语句(1)条件IF语句条件IF语句含有一个THEN子句,用来执行满足IF条件的那些观测。如果某个观测不满足IF条件,则THEN子句不被执行,此时可以使用ELSE语句来执行有关的运算。如果没有规定ELSE语句,则SAS系统执行紧跟在IF后面的下一个语句。其一般格式是:IF condition THEN statement ; 例3.5:data class1 class2; input name$ chinese maths english ;
20、total=chinese+maths+english; if total=240 then output class1; else output class2; cards; a 82 78 69 b 90 78 89 c 79 86 98 ; proc print data=class1; title 数据集class1 ; proc print data=class2; title 数据集class2 ; run; 例3.10:data class ; input sex$ chinese maths english ; total=chinese+maths+english; if s
21、ex=m then if total=240 then output; else put total2;run;proc print data=whereab;run; data a ;input x y ;cards;1 15 3 78 5 90;data b;input x z ;cards;1 69 2 89 4 98;data ifab;merge a b;if x2;run;proc print data=whereab1;run; 例3.11:使用WHERE语句的运行结果:Obs x y z 4 78 98 5 90 .Where 语句先对数据使用where语句,然后再进行其他语句
22、的执行:x y x z 78 4 985 90使用IF语句的运行结果:Obs x y z 1 4 90 98if 语句先对数据进行合并,再执行if 语句: x y z 1 15 69 2 78 89 4 90 982. SELECT语句SELECT语句可提供灵活的多分支语句,SELECT语句有两种基本的结构:(1)SELECT(选择表达式); WHEN(值列表) 语句; WHEN(值列表) 语句; OTHERWISE 语句; END;其中:“选择表达式”是一个变量或者表达式;“值列表”是一个与选择表达式相同取值类型的表达式或具体取值,可以有一项,也可以有多项,多项之间用逗号隔开;执行SELEC
23、T结构时,先计算出选择表达式和值列表中的所有值,然后把选择表达式值由前向后与值列表中的值相比,如相等则执行对应的语句,然后退出SELECT结构(不再查看后面的值列表)。如果选择表达式的值不等于任何值列表中的值则执行OTHERWISE对应的语句。 例:SELECT(month); WHEN(Feb,Mar,Apr) put春天; WHEN(May,Jun,Jul) put夏天; OTHERWISE put 秋天或冬天;END;(2)SELECT; WHEN(条件) 语句; WHEN(条件) 语句; OTHERWISE 语句; END;这种SELECT语句没有“选择表达式”,而是在每一个WHEN语
24、句指定一个条件(逻辑表达式),执行第一个满足条件的WHEN语句后的语句,如果所有的条件都不满足则执行OTHERWISE后的语句。 例:SELECT; WHEN(age7) put婴幼儿; WHEN(age18) put少年儿童; WHEN(age60) put中青年; OTHERWISE put 老年;END;3. DO语句DO语句是一种循环语句,即在DO 与END语句之间的这些语句被作为一个单元处理,称为DO组。常见DO语句有以下四种形式:简单DO语句、循环DO语句(计数)、DO WHILE语句(当型)、DO UNTIL语句(直到型)。(1) 简单DO语句 (自身没有控制变量)简单DO语句常
25、常用在IF-THEN-ELSE语句里,用来执行当IF条件成立时的一组语句,在IF条件不成立时,跳出这组语句去执行其它SAS语句。其一般格式是: DO; 其它SAS语句; END;例3.12:data class ;input sex$ chinese maths english ;if sex=m then do; total=chinese+maths+english; n+1; end;ave=sum(chinese,maths,english)/3;cards;m 82 78 69 f 90 78 89 m 79 86 98 m 76 56 80 f 72 76 81 f 69 78 9
26、1 m 92 71 85;proc print;run;(2)循环DO语句循环DO语句是指DO与END之间的语句被重复执行的语句,其一般格式为: DO index-variable = start ; 其它sas语句; end;其中: index-variable:控制(计数)变量,它的值控制着执行情况及执行次数;Start为控制变量的初始值,当同to stop(结束值)或BY increment(步长)一起使用时,程序先把控制变量赋值为初始值,如果此值小于等于结束值则执行循环体语句,然后把控制变量加上步长继续执行循环体,直到控制变量的值大于结束值为止。省略步长时默认为1。 例: data;
27、do i=1 to 20 by 2; j=i*3; file print; put i j ; end; run;1 1 3 27 5 125 7 343 9 729 11 1331 13 2197 15 3375 17 4913 19 6859 (3) DO WHILE语句该语句规定当WHILE后的表达式(其值是在每次循环开始前被计算)运行的结果为真时,重复地执行DO组中的语句。其一般格式为: DO WHILE(expression)。(4) DO UNTIL语句该语句规定直到UNTIL后的表达式运行的结果(其值是在每次循环结束后被计算)为真时,循环结束。其一般格式为:DO UNTIL(ex
28、pression); 例3.14:data class ;input sex$ chinese maths english ; do i=1 to 10 by 2 while (n lt 2); total=chinese+maths+english; n+1; end;ave= (chinese+maths+english)/3;cards;m 82 78 69 f 90 78 89 m 79 86 98 m 76 56 80f 72 76 81 f 69 78 91 m 92 71 85;proc print;run; 例3.14:data class ;input sex$ chines
29、e maths english ; do i=1 to 10 by 2 until (n lt 2); total=chinese+maths+english; n+1; end;ave= (chinese+maths+english)/3;cards;m 82 78 69 f 90 78 89 m 79 86 98 m 76 56 80f 72 76 81 f 69 78 91 m 92 71 85;proc print;run;3.2.7 SET语句SET语句的用法:调用一个已存在的SAS数据集(复制数据集); 对已存在的SAS数据集进行修改;把几个已存在的SAS数据集连接成一个新的数据集
30、。 1.调用一个SAS系统已存在的数据集利用SET语句可以调用一个已经存在的SAS数据集,以便对数据进行其他处理。一般格式为:DATA new data-set-name;SET old data-set-name ;如: data class1; set class; 2.对已存在的SAS数据集进行修改利用SET语句可以从一个已经存在的SAS数据集创建新的数据集,一般格式为:DATA new data-set-name;SET old data-set-name ;SET后的选择项有两种情况:一是利用KEEP、DROP选项或语句生成部分变量的子集;二是利用WHERE、IF、SELECT语句生
31、成部分观测子集。Data class1;Set sasuser.class (drop=name sex);run;Data class1;Set sasuser.class;Total=chinese+maths+english;If total=270 then output;run;Data class1 class2;Set sasuser.class;Select(sex); when(男) output class1; when(女) output class2;End;Drop sex;run; 3.数据集的纵向合并(1)相同变量顺序连接此种方式下,各SAS数据集含有相同的变量,
32、SET语句将各数据集按照顺序把所有观测连接在一起,即使两个观测完全相同也应按顺序连接起来,新数据集的观测数目是所有这些数据集观测数目之和。 data classes; set class1 class2 class3 class4; run;例3.15: data A; input name$ sex$; cards; rose f david m john m mayers f ;data B; input name$ computer physical maths english ; cards; rose 89 65 76 87 david 78 86 78 98 john 90 65
33、76 87 mayers 89(2)不同变量顺序连接。连接的几个数据集含有不同的变量,将具有相同变量的观测连接起来,而没有变量取值的观测为缺失值。连接后的变量个数为所有数据集变量数之和。67 78 80 ;data C; input sex$ total ave; cards; f 317 79.25 m 340 85 m 318 79.5 f 314 78.5 ;data ABC; set A B C; run; proc print; run;(3)按同一变量顺序连接。首先按共同变量排序,连接后所形成的新数据集,首先读入第一个数据集中第一个BY组中的观测,然后读入第二个数据集中相同BY组中
34、的观测,以此类推,知道读完所有BY组中的观测。 data A; input name$ sex$; cards; rose f david m john m mayers f ; data B; input name$ computer physical maths english ; cards; rose 89 65 76 87 david 78 86 78 98 john 90 65 76 87 mayers 89 67 78 80 ; data C; input sex$ total ave; cards; f 317 79.25 m 340 85 m 318 79.5 f 314 7
35、8.5 ; data ABC; set A B C; run; proc print; run; data A; set A; run; proc sort; by sex; run; data C; set C; run; proc sort; by sex; run; data AC; set A C; by sex; run; proc print; run;3.2.8MERGE语句(数据集的横向合并)MERGE语句把两个或两个以上的SAS数据集的变量合并为一个新的SAS数据集的变量。其一般格式为: MERGE data-set-name-1 data-set-name-2 data-s
36、et-name-n;1.一对一合并。其合并过程为:按MERGE语句后面数据集的排列顺序,把第一个数据集中的第一个观测与第二个数据集中的第一个观测,,第N个数据集中的第一个观测合并成新数据集中的第一个观测以此类推,直到所有观测被合并为止。合并时,以下几点需要注意:合并后新数据集的观测总数为参加合并的数据集中观测的最大值。在合并时,如果某数据集没有某一个或几个观测,则其对应的变量值以缺失值代替。在合并时,如果某几个数据集有共同变量,则合并后的新数据集仅含有一个该变量,其对应的值为列在MERGE语句最后一个含有该变量的数据集中的该变量观测值。 data A; input name$ sex$; ca
37、rds; rose f david m john m mayers f ; data B; input name$ computer physical maths english ;cards; rose 89 65 76 87 david 78 86 78 98 john 90 65 76 87 mayers 89 67 78 80 ; data C; input sex$ total ave;cards; f 317 79.25 m 340 85 m 318 79.5 f 314 78.5 ; data ABC;MERGE A B C;run; proc print;run;2.匹配合并。
38、每一个数据集至少有一个共同变量,且首先按共同变量进行排序,此共同变量称为匹配变量,通过BY组排序后形成的每一个组称为BY组,匹配合并实际上就是BY组之间的一对一合并。合并时,以下几点需要注意:对每一个BY组,新数据集中的BY组的观测个数是各合并数据集中相应BY组观测数的最大值;对不同的BY组,SAS系统首先处理那些BY值较小的观测,然后再处理BY值较大的观测;在同一BY组中,按MERGE语句后面数据集的排列顺序,把各数据集对应BY组的第一个观测进行合并,形成新数据集中的第一个观测,以此类推没直到所有观测被合并为止。如果某一数据集在某一BY组中没有观测,则按缺省值处理。 例3.16: data
39、A; input name$ sex$;cards; benjim m rose f david m john m mayers f mayers m ; proc sort;by name;run; data B; input name$ comp phys mat eng;cards; rose 89 65 76 87 david 78 86 78 98 david 87 69 77 90 john 90 65 76 87 mayers 89 67 78 80 star 66 81 75 94 ; proc sort;by name;run; data AB; merge A B;by n
40、ame; run; proc print; run;排序的结果 NAME COMP PHYS MAT ENG david 78 86 78 98 david 87 69 77 90 john 90 65 76 87 mayers 89 67 78 80 rose 89 65 76 87 star 66 81 75 94 NAME SEX benjim m david m john m mayers f mayers m rose f内容回顾DATA步PROC步DATA score;input name$ sex$ math chinese english;total=chinese+maths
41、+english;cards;王华 F 92 98 86 金一 M 89 96 93赵磊 M 86 90 88 .;PROC print dada=score;run;DATA步PROC步从原始数据创建SAS数据集:DATA、INPUT、CARDS、“;”;定义变量属性:LABEL、FORMAT;调用已有的数据集:SET;选择一部分观测创建新的SAS数据集:IF OUTPUT、 IFDELETE、WHERE;选择一部分变量创建新的SAS数据集:KEEP、DROP;控制语句:IFTHEN、SELECT、DO;数据集的纵向合并:SET;数据集的横向合并:MERGE;赋值语句与累加语句:表达式。 P
42、ROC步是用PROC开始的SAS语句,是SAS系统进行处理和分析数据的语句。 PROC步的一般格式为: PROC proc-name ; 过程语句 ; 过程语句 ; RUN; 3.3 PROC步3.3.1 SAS过程步中的常用语句1.PROC语句该语句指定要进行的分析方法。其一般格式为:PROC proc-name ;其中: proc-name 表示用户要调用的SAS过程名:对数据集做某种变换的过程名,如SORT过程等;所要进行的统计分析方法,如MEANS过程、REG过程等。 options规定此过程的一个或几个选项,多个选项用空格隔开。例:Proc means data=myclass.sc
43、ore18 maxdec=3 sum mean range;表示系统调用均值过程,并计算数据集score18中各数值变量的和、均值和极差,并保留3位有效小数。2. 其它过程语句在PROC语句之后、结束语句之前可以有若干个可选的过程语句,用来对PROC语句进行具体设置,主要有: VAR语句:指定分析变量; WHERE语句:指定待分析的观测子集; BY语句和CLASS语句:指定分组变量; ID语句:指定标识变量; WEIGHT语句和FREQ语句:指定权重变量和频数变量; MODEL语句:指定模型形式; LABEL语句和FORMAT语句:指定变量标签和输出格式; OUTPUT语句:指定输出结果存放的
44、数据集及输出结果形式。(1) VAR语句该语句用来指定分析变量,在VAR后面给出变量列表,各变量名之间用空格隔开。其一般格式为:VAR variable-name-1 variable-name-n ;例:Var weight height; Var x1-x5 y;(2) WHERE语句该语句可以选择数据集的一个观测子集来进行分析。一般格式为: WHERE expression;例:where math=60 and chinese=60;(3) BY语句和CLASS语句BY语句用来指定一个或几个分组变量,根据这些分组变量值的不同将观测分组,然后对每一组观测分别进行本过程进行的分析。!SAS
45、系统要求首先应按分组变量进行排序。 其一般格式为:BY variable-name-1 variable-name-n;例:假定数据集myclass.score18已按变量sex排序,则程序 Proc print data= myclass.score18;by sex;run; 将产生男、女生分开输出的两个数据集列表。Class语句同样表示按指定的变量进行分类。与BY语句不同,使用CLASS语句进行分类分析,分类变量不需要事先进行排序。其一般格式为:CLASS variable-name-1 variable-name-n ;当BY语句和CLASS语句同时使用时,系统首先按BY变量进行分组,
46、然后再在每一组中按CLASS变量进行分组。BY语句和CLASS语句输出结果有差异。例:Proc print data= myclass.score18;class sex;run;(4) ID语句该语句表示用指定的变量来标识观测。在输出窗口中,系统默认用观测的序号来区分观测,当使用ID语句时,输出的观测用ID变量的值来识别,而观测的序号则不输出。!ID变量值与观测应一一对应。其一般格式为:ID variable-name;(5) WEIGHT语句和FREQ语句WEIGHT语句用来指定权数变量,可以用权数变量对其它变量进行加权,通常用在每个观测的重要性不同的情形下。该变量值应大于0,小于0或缺省
47、时,则取值为0。其一般格式为:WEIGHT variable-name;FREQ语句用来指定各观测出现的频数或次数。若变量的值1或缺省,相应的观测不参加计算统计量;若取值不是正整数,则取整数部分。其一般格式为:FREQ variable-name;WEIGHT语句与FREQ语句之间的区别:两者表示的观测次数不同;两者计算结果可能不同。(6) MODEL语句该语句在统计建模过程中指定模型的形式,等号左边的变量为因变量,等号右边的变量为自变量。其一般格式为:MODEL dependent-variables-name=independent-variables-name ;例:model y=x1
48、-x5; y1 y2=x1 x2 x3 x4 x5;(7) LABEL语句和FORMATLABEL语句为变量指定一个临时标签,FORMAT语句为变量输出规定一个输出格式。过程步中规定标签和输出格式只用于此过程的本次运行,而数据步中的标签和输出格式是附属于数据集本身的,是永久的。 proc print data=myclass.score18 label; id name; var math chinese; label name=姓名 math=数学成绩 chinese=语文成绩; format math 5.1 chinese 5.1; run;(8) OUTPUT语句该语句用来指定输出结果
49、存放的数据集名以及输出内容在新数据集中的名称。其一般格式为: OUTPUT out=data-set-name keywords= variable-name;其中:“out=”给出输出结果数据集的名字;“keyword=variable-name” 指定输出哪些结果及其在输出数据集中的名字。 proc means data=myclass.score18; var math; output out=result n=n mean=meanmath var=varmath; run; proc print data=result; run;3.3.2. 几个常用的SAS过程1. SORT(排序
50、)过程SORT过程将SAS数据集按一个或几个变量的次序进行排序。其一般格式为: PROC SORT ; BY variable-1 variable-n;其中,指定进行排序的数据集和输出的数据集的名字:DATA=data-set-name;OUT=data-set-name。BY语句指定排序变量:可同时指定多个排序变量;关键词descending。例:对数据集myclass.score18中的数据,先按性别升序排序,再按级降序排序。Proc sort data=myclass.score18 out=paixu;By sex descending grade;Run;Proc print;Ru
51、n;是否可替换为class?2. PRINT(打印)过程该过程用于输出SAS数据集中的内容,以便于检查数据输入是否正确。其一般格式为: PROC PRINT ; VAR语句; WHERE语句; ID语句; LABEL语句和FORMAT语句; BY语句/CLASS语句; PAGEBY语句; SUM语句 ; TITLE语句和FOOTNOTE语句; (1) PROC PRINT ;该语句是PRINT过程唯一必需的,options选项有:DATA=data-set-name:指定所要打印的数据集,如省略则打印最新生成的SAS数据集;N:要求在输出这个数据集的数据列表之后同时输出观测的个数。如果使用BY
52、语句,在每个BY组的数据输出之后同时输出该BY组的观测个数;NOOBS:不输出观测数据的序号。 (2) VAR语句:指定输出列表中的变量及其顺序;(3) WHERE语句:只输出满足条件的观测;(3) ID语句:指定输出列表中的标识变量;(4) LABEL语句和FORMAT语句:指定输出变量的标签和格式;(5) BY语句/CLASS语句:指定分类变量,打印输出时按分类变量的取值不同分组显示。proc sort data=myclass.score18;by sex;run;proc print n noobs ; by sex;run; (6) PAGEBY语句:PAGEBY variable;
53、该语句指定分页变量,打印输出时如果分页变量的取值发生变化则在新的一页上输出。!使用pageby变量必须同时使用sort过程,并且pageby变量与sort过程中的by变量和print过程中的by变量一致。data sample;input x y z ;Cards;1 1 1 1 2 3 1 7 8 9 5 4 3 4 2 4 5 5 6 6 7 1 4 3 5 6 2; proc sort; by x; run;proc print; by x; pageby x; run; (7) SUM语句:SUM variables; 该语句用来指定一个或多个求和变量。当同时使用BY语句时,求和过程同
54、时计算每组合计和总和。data sample;input x y z ;Cards;1 1 1 1 2 3 1 7 8 9 5 4 3 4 2 4 5 5 6 6 7 1 4 3 5 6 2;proc sort; by x; run;proc print; by x; sum y z; run; (8) TITLE语句和FOOTNOTE语句:TITLE 标题内容或FOOTNOTE 脚注内容 该语句用来指定输出结果的标题和脚注,它们均为全程语句:可以用在DATA步和PROC步内,也可以单独使用;具有持续性,用没有内容的空title/footnote语句取消指定的标题或脚注;proc print
55、data=myclass.score18;title 10级1班学生期末成绩表;footnote 2012年3月29日;run;(9) 对输出结果的管理 RESULT(结果管理窗口):可调用“view-result”打开;HTML格式输出:调用“tools-opitions-preferences”菜单。3.TRANSPOSE(转置)过程TRANSPOSE过程把原SAS数据集行列互换,转置为一个新的SAS数据集。其一般格式为: PROC TRANSPOSE ; VAR 语句; ID 语句; BY语句; COPY 语句; PROC语句中的内容:DATA=data-set-name;OUT=dat
56、a-set-name;PREFIX=name;NAME=name。 VAR语句指定转置变量。 ID语句指定输入数据集中的一个变量为输出数据集中观测的标识变量。 BY语句指定转置的分组变量,分组变量取不同值的数据作为一组进行转置,但BY 变量本身并不参加转置。COPY语句中列出的所有变量直接输出,不被转置。 Data A;Input name$20. state$ goods$ employ sale profit;cards;Thomson France Electron 100 11917 2441Farmland Industries U.S. Food 11 4723 3255Chrys
57、ler U.S. Mobiles 128 43600 2551Volkswagen Germany Mobiles 252 46312 1232Nissan Motor Japan Mobiles 143 53760 805Borden U.S. Food 39 6700 6310Mazda Motor Japan Mobiles 33 20279 4541Westinghouse U.S. Electron 102 11564 3260Amerada Hess U.S. Oil 10 5852 2680Peugeot France Mobiles 144 25670 258;Proc sor
58、t out=sortA; by state; run;Proc transpose out=transA;Var state goods employ sale profit;Id name;By state; run;Proc print ;Run;4. MEANS(均值)过程 MEANS过程用于计算变量的基本描述统计量,可对均值进行假设检验,也可建立包含若干统计量的SAS数据集。其一般格式为: PROC MEANS ; VAR语句; BY语句/CLASS语句; FREQ语句/ WEIGHT语句; ID语句; OUTPUT语句;PROC MEANS语句 PROC MEANS ; Option
59、s包括的内容:DATA =data-set-name; NOPRINT或PRINT;MAXDEC=number;ALPHA=VALUE;数据分布的特征集中趋势 (位置)偏态和峰态(形状)离中趋势 (分散程度) statistic-keywords包括的描述统计量: N:观测数; NMISS:缺失观测数; SUM:变量值和; USS:未修正平方和;CSS:修正平方和;SUMWGT:变量值加权和; MEAN:均值; STD:标准差; MIN:最小值; MAX:最大值; RANGE:全距; VAR:方差; CV:变异系数; SKEWNESS:偏态系数; KURTOSIS:峰度系数; T:t统计量值;
60、 PRT:P值; CLM:均值的置信区间,其中LCLM为置信下限、UCLM为置信上限。集中趋势分布形态离中趋势T检验例:为了了解某地区居民家庭收入状况,现从这一地区家庭中随机抽查了100户居民,调查其家庭人均收入,调查结果如下(单位:百元):271 396 287 399 466 269 295 330 425 324 228 113 226 176 320 230 404 487 127 74 234 523 164 336 343 330 436 141 388 293 464 200 392 265 403 259 426 262 221 355 324 374 347 261 287
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论