收藏 分享(赏)

SAS第三章.doc

上传人:myw993772 文档编号:6331669 上传时间:2019-04-07 格式:DOC 页数:47 大小:404.50KB
下载 相关 举报
SAS第三章.doc_第1页
第1页 / 共47页
SAS第三章.doc_第2页
第2页 / 共47页
SAS第三章.doc_第3页
第3页 / 共47页
SAS第三章.doc_第4页
第4页 / 共47页
SAS第三章.doc_第5页
第5页 / 共47页
点击查看更多>>
资源描述

1、第 3 章 SAS 编程基础 41第 3 章 SAS 编程基础3.1 SAS 语法基础3.1.1 SAS 常数SAS 常数用来表示固定的值,它或者是一个数字,或者是用引号引起来的字符串,或者是其他特殊记号。SAS 常用以下三类常数:一、数值常数一个数值常数就是出现在 SAS 语句里的数字。其书写和用法与其他高级语言的使用基本相同,它可以包括小数点,负号及 E 记号等,如:0.1 ,1.23, 5, 1.2E3, 0.5E5数值常数缺失时用小数点“.”表示。二、字符常数字符常数是由单引号括起来的 1 到 200 个字符组成的。如语句:if name=tom then do;中的tom是一个字符常

2、数。如果字符常数含有引号,此时应用双引号括起来,如 name=”tom s”。字符常数缺失时用空格加引号()表示。三、日期、时间和日期时间常数为了把日期、时间或日期时间值表示为常数,在输入格式或输出格式中使用相同记法:TIME.,DATE.和 DATETIME.。格式值用单引号括起来,并跟随一个 D(日期),T (时间)或 DT(日期时间)。如:1JAN1998D, 01JAN98D, 9:25T , 18JAN98:9:25:20DT。3.1.2 SAS 操作符SAS 操作符是一些符号,用它们可以作比较、算术运算或逻辑运算,它有前缀和中缀之分。前缀操作符用在数值、变量或函数的前面,主要有+、

3、NOT。而中缀操作符则是SAS 系统与经济统计分析42用 在 两 个 运 算 对 象 的 中 间 , 主 要 有 算 术 操 作 符 、 比 较 操 作 符 、 逻 辑 操 作 符 、 其 他 操 作 符四 类 。一、算术操作符算术操作符表示执行一种算术运算。常用算术操作符、含义及举例见表 3.1。表 3.1 SAS 算术操作符、含义及举例操作符 符号含义 举例+ 加法 Sum=x+y 减法 Diff=x-y* 乘法 Mult=x*y/ 除法 Divide=x/y* 幂运算 Raise=x*5| 字符串并接 Str=str1|str2二、比较操作符比较操作符用来建立两个量之间的一种关系,并要求

4、 SAS 确定这种关系是成立或不成立。如果成立,输出的结果为 1;如果不成立,结果为 0。常用比较操作符、含义及举例见表 3.2。表 3.2 SAS 比较操作符、含义及举例操作符 符号 含义 举例LT Greater Than if price10;EQ = Equal if dest=lon;LE = Greater equal if cost=1000;NE = Not Equal if x1=5;IN in some value list if dest in (lon, par);三、逻辑操作符逻辑操作符也称为布尔算符,在表达式里通常用来连接一系列比较式,常与 IF 语句结合使用。常用

5、逻辑操作符、含义及举例见表 3.3。表 3.3 SAS 逻辑操作符、含义及举例操作符 符号 意义 举例AND input income1-income31;mean=mean(of income1-income31);std=std(of income1-income31);skewness=skewness(of income1-income31);kurtosis=kurtosis(of income1-income31);cards;SAS 系统与经济统计分析4610349.69 8140.50 5661.16 4724.11 5129.05 5357.79 4810.00 4912.8

6、8 11718.00 6800.23 9279.16 5293.55 7432.26 5103.58 6489.97 4766.26 5524.54 6218.73 9761.51 5834.43 5358.32 6275.98 5894.27 5122.21 6324.64 7426.32 5124.24 4916.25 5169.96 4912.40 5644.86;proc print;run;程序运行结果列表如下:输出 3.1 全国人均可支配收入的平均值、标准差、偏度和峰度平均值 标准差 偏度 峰度6305.70 1799.26 1.65322 2.12286从 输 出 结 果 可 以

7、 看 出 , 2000 年 全 国 人 均 可 支 配 收 入 为 6305.70 元,偏度为1.65322 表明,收入分布略向右偏斜。5. 随机函数(1)均匀分布:UNIFORM ( seed)或 RANUNI(seed),这里 seed 必须是常数,前者或是 0 或是 5 位、6 位、7 位的奇数;后者是模小于 的任何数值常数。123(2)标准正态分布:NORMAL(seed)或 RANNOR(seed),这里 seed 必须是常数,前者或是 0 或是 5 位、6 位、7 位的奇数;后者是模小于 的任何数值常数。注意,对于均值为 M,标准差为 S 的正态分布随机变量 Y,可由标准正态分布的

8、线性函数得到:Y=M+S* NORMAL(seed)【例 3.2】 试用产生标准正态分布的随机函数 normal(seed )产生均值为 170,方差为 30 正态随机数 10 个。解:根据题目要求,编程如下:data a( drop=i);do i=1 to 10 by 1;z=170+sqrt(30)*normal (0);output;end;程序说明:程序利用循环语句和赋值语句创建了一个名为 a 的 SAS 数据集,注意这里的 data 步没有 INPUT 语句。循环变量 i 从 1 到 10 表示循环 10 次,而赋值语句则利用标准正态随机函数 normal( 0) 产生一个均值为

9、170,方差为 30 的正态分布的随机数,从而整个循环组产生 10 个这样的随机数。程序所产生的 10 个随机数字如下:输出 3.2 由正态随机函数产生的 10 个随机数第 3 章 SAS 编程基础 47167.151 164.028 176.099 176.227 179.322174.731 168.514 168.983 173.416 172.156注意,每次产生的随机数可能不同。3.1.4 SAS 表达式SAS 表达式是由一系列操作符与运算对象连接而成的,它被执行后产生一个运算结果。运算对象可以是常数、变量和函数,操作符可以是算术操作符、比较操作符和逻辑操作符。不含或仅含有一个操作符

10、的表达式称为简单表达式,含有二个或二个以上操作符的表达式称为复合表达式。下列式子都是表达式。X+5, 10,SIN(X),(X1+X2)/2,X+10EXP(X1X2),SCORE90,A =B=C注意,单独的常数、变量也是表达式的一种形式。3.2 DATA 步中的一些常用语句3.2.1 用在 DATA 步中的运行语句SAS 系统提供了一些语句对变量或观测进行加工处理。在 DATA 步建立一个 SAS 数据集之后,可以用 SAS 语句修改数据,选择观测子集,对数据加工处理等。一、赋值语句和累加语句1. 赋值语句一般格式:variable = expression;赋值语句将表达式计算的结果赋给

11、变量 (variable)。表达式中可以包含 SAS 操作符,用来执行基本的运算,还可以包含 SAS 函数,用来进行一些数学运算、计算统计量、处理SAS 数据。需要注意的是:表达式中的变量必须已被赋值,否则作为缺省值处理。例如:X= Y+Z*3;X =SUM(Y,Z );Y=1EXP(3.1415*180);C=8*(X=Y);。2. 累加语句一般格式:variable+ expression;累加语句将表达式的计算结果加到累加变量上,作为累加变量新的观测值送到数据集中。这里的 Variable:定义累加变量的名字,它必须是数值型的,且第一个观测被读入前它自动地被赋值为 0。表达式(expre

12、ssion)中同样可以包含 SAS 操作符,用来执行基本的运算,还可以包含 SAS 函数,用来进行一些数学运算、计算统计量、处理 SAS 数据。当SAS 系统与经济统计分析48这个表达式的计算结果为缺省值时,它被作为 0 处理。下列语句都是累加语句:n+1; x1+x2; x 1+(x 2); sum x+x*x; nx +x=.;【例 3.3】 下列是 2002 年某班部分学生语文、数学和英语考试成绩,试利用累加语句对总分超过 240 的学生进行计数。考试成绩如下:82 78 69 90 78 89 79 86 98 76 56 80 72 76 81 69 78 91 92 71 85解:

13、根据题目要求,编写程序如下:data class;input chinese maths english ;total=chinese+maths+english;if total=240 then n+1;else delete;cards;82 78 69 90 78 89 79 86 98 76 56 80 72 76 81 69 78 91 92 71 85;程 序 说 明 : data 步 首 先 创 建 了 一 个 名 为 class 的 SAS 数 据 集 。 第 三 个 语 句 为 赋 值 语 句 ,它 把 语 文 、 数 学 和 英 语 成 绩 的 总 分 加 起 来 赋 给

14、 变 量 total。 第 四 句 为 条 件 语 句 , 这 将 在 以下 介 绍 , 其 中 if total=240 then n+1 语 句 中 的 n+1 为 累 加 语 句 , 这 里 n 为 累 加 变 量 名 , 1为 表 达 式 。 该 语 句 表 示 当 总 分 total=240 时 , 变 量 n 加 1。 程 序 运 行 结 果 , 请 读 者 自 行 给出 。二、OUTPUT 语句和 DELETE 语句1. OUTPUT 语句OUTPUT 语句规定 SAS 系统输出当前的观测到指定的 SAS 数据集中。一般格式:output ;output 后 的 括 号 中 的

15、数 据 集 名 是 可 选 项 。 当 没 有 该 选 项 时 , SAS 系 统 把 当 前 这 个 观测 输 出 到 DATA 语 句 命 名 的 所 有 数 据 集 上 , 并 返 回 到 DATA 步 开 始 接 着 处 理 下 一 个 观 测 。当 有 该 选 项 时 , SAS 系 统 把 当 前 这 个 观 测 输 出 到 output 语 句 规 定 的 所 有 数 据 集 上 , 并 返回 到 DATA 步 开 始 接 着 处 理 下 一 个 观 测 。 这 里 数 据 集 名 可 以 多 于 一 个 , 但 必 须 在 DATA语 句 中 已 被 命 名 。 下 列 例 3

16、.4、 例 3.5 两 段 程 序 给 出 了 OUTPUT 语 句 常 用 的 两 种 使 用 方法 。【例 3.4】 data class ;input name$ chinese maths english ;score=chinese;output;score=maths;output;score=english;output;第 3 章 SAS 编程基础 49cards;a 82 78 69 b 90 78 89 c 79 86 98 ;数据集 class 的输出结果如下:输出 3.4 数据集 class 的数据结构OBS NAME CHINESE MATHS ENGLISH SCO

17、RE1 a 82 78 69 822 a 82 78 69 783 a 82 78 69 694 b 90 78 89 905 b 90 78 89 786 b 90 78 89 897 c 79 86 98 798 c 79 86 98 869 c 79 86 98 98由输出结果可以看出,三个 OUTPUT 语句把原始数据中的一个观测变成了三个观测。【例 3.5】 程序如下:data class1 class2;input name$ chinese maths english ;total=chinese+maths+english;if total=240 then output cl

18、ass1;else output class2;cards;a 82 78 69 b 90 78 89 c 79 86 98SAS 系统与经济统计分析50;proc print data=class1;title 数据集 class1;proc print data=class2;title 数据集 class2;run;输出 3.5 数据集 class1、class2 的数据结构数据集class1OBS NAME CHINESE MATHS ENGLISH TOTAL1 b 90 78 89 2572 c 79 86 98 263数据集class2OBS NAME CHINESE MATHS

19、 ENGLISH TOTAL1 a 82 78 69 229由输出结果可以看出,第一个 OUTPUT 语句把满足 total=240 的观测输出到数据集class1 中,把不满足 total=240 即 total240; where score=60 and score=240; where sum(chinese, maths, english)263; where total in( 257 263);与其他 SAS 表达式一样,在执行 WHERE 表达式时 SAS 系统首先对第一个观测计算WHERE 后的 SAS 表达式,之后再决定第一个观测是否执行 WHERE 语句后的其他 SAS语

20、句。如果 WHERE 表达式运算的结果为真,则 SAS 系统紧接着执行此后的其他 SAS 语句;如果 WHERE 表达式运算的结果为假,则 SAS 系统将不执行此后的其他 SAS 语句,而是返回到 DATA 步的开始继续处理第二个观测,直到所有观测都被处理为止。注意,数值变量的名字可以单独出现在 WHERE 表达式中,如 where x 语句中的变量x。当运行 WHERE 语句时, SAS 系统判断该变量值是否为 0 或缺省。如果该变量值是 0或缺省,则该表达式运算结果为假,否则为真。【例 3.8】 data class ;input sex$ chinese maths english ;c

21、ards;m 82 . 69 f 90 0 89 m 79 86 98;data class1;set class;where maths;run;proc print;run;程序说明:上述这段程序 SAS 系统首先创建了一个名为 class 的数据集,其中,第一个观测变量 maths 值为缺省,第二个观测其值为 0,第三个观测其值为 86。接下来,SAS 系统 利 用 set 语 句 又 创 建 了 一 个 名 为 class1 的 SAS 数 据 集 。 该 数 据 集 利 用 where maths 条件 语 句选取数据集 class 中的 maths 值为非 0 或缺省的所有其他观测

22、,由此不难理解如下输出结果。SAS 系统与经济统计分析54输出 3.8 由 where 条件创建的数据集 class1 的数据结构OBS SEX CHINESE MATHS ENGLISH1 m 79 86 98注意,由于 WHERE 条件语句不能直接用在由原始数据创建的 SAS 数据集中,所以必须使用 SET 语句重新创建一个 SAS 数据集。下面将会看到,这是与 IF 条件语句重要的区别之一。除了上述一般形式的运算符外,WHERE 表达式还常用以下一些特有的运算符:1. Between-And 算符该算符选择变量值落在某个范围内的观测,范围的界限可以是常数或表达式。其一般格式为:WHERE

23、 Variable Between value and value;如:WHERE score Between 60 and 100;即选择 score(分数)在 60 和 100 之间的观测;WHERE profit Between 1000000 and 2000000;即选择 profit(利润)在 1000000 和2000000 之间的观测。2. Same-And 算符该算符的意义是除满足已选的条件外,还满足 And 后的条件的观测。【例 3.9】 data class ;input sex$ chinese maths english ;total=chinese+maths+en

24、glish;cards;m 82 78 69 f 90 78 89 m 79 86 98;data class1;set class;where total 180;where same and total以上 IF 语句,SAS 系统首先计算 IF 后面的条件(condition)。如果计算结果为非 0,认为条件成立,则执行 THEN 后的语句(statement)。如果计算结果为 0 或缺省,认为条件不成立,则不再执行 THEN 后的语句(statement),而是执行 ELSE 后的语句或紧跟在IF 后面的下一个语句。例如:if total=240 then output class;i

25、f X=3 THEN Y=X;if status=ok and type=3 THEN count+1;if total=240 then output class;else output class1;注意,(1)IF-THEN-ELSE 语句还可以嵌入一个 IF-THEN-ELSE 语句。例如:【例 3.10】 data class ;input sex$ chinese maths english ;total=chinese+maths+english;if sex=m thenif total=240 then output;else put total2; if x2;run; r

26、un;proc print data=whereab;run; proc print data=ifab;run;使用 WHERE 语句的运行结果 使用子集 IF 语句的运行结果OBS X Y Z OBS X Y Z1 4 78 98 1 4 90 982 5 90 上述两个数据集之所以出现不同的结果,是由于使用 WHERE 语句时,先对数据集a,b 应用 WHERE 语句,由此可得到数据集 a,b 的子集分别为: X Y4 785 90X Z3 98SAS 系统与经济统计分析58然后执行两子集的合并,从而得到以上输出结果。使用子集 IF 语句时,是先合并数据集 a,b,再执行 IF 语句。合

27、并后的数据集 执行 IF 语句后所得数据集二、DO 语句DO 语句是一种循环语句,即在 DO 后面直到出现 END 语句之前的这些语句被作为一个单元处理,称为 DO 组。对于 DO 语句,根据需要可以嵌套使用。常见 DO 语句有以下五种形式:简单 DO 语句、循环 DO 语句、DO WHILE 语句、DO UNTIL 语句、DO OVER 语句。1. 简单 DO 语句简单 DO 语句常常用在 IF-THEN-ELSE 语句里,用来执行当 IF 条件成立时的一组语句,在 IF 条件不成立时,跳出这组语句去执行其他 SAS 语句。其一般格式是: DO; 其他 SAS 语句; END;【例 3.12

28、】 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 80f 72 76 81 f 69 78 91 m 92 71 85;proc print;run;X Y Z1 15 692 78 894 90 98X Y Z4 90 98第 3 章 SAS 编程基础 59程序说明:上述这段程

29、序 SAS 系统首先创建了一个包含性别在内的名为 class 的 SAS数据集。IF 语句首先判断性别是否为男性,若是男性,再执行其中的 DO 组;若是女性,则直接执行 IF 后的赋值语句:ave=sum(chinese, maths, english)/3。由于女性同学没有执行 IF 条件中的 DO 组,所以女性同学的总分为缺省,同时累加语句也没有执行,从而 n 值不变。输出 3.12 由循环 DO 组所创建的数据集 CLASS 的数据结构OBS SEX CHINESE MATHS ENGLISH TOTAL N AVE1 m 82 78 69 229 1 76.33332 f 90 78

30、89 . 1 85.66673 m 79 86 98 263 2 87.66674 m 76 56 80 212 3 70.66675 f 72 76 81 . 3 76.33336 f 69 78 91 . 3 79.33337 m 92 71 85 248 4 82.66672. 循环 DO 语句循环 DO 语句是指 DOEND 之间的语句被重复执行的语句,其一般格式为:DO index-variable =spacification-1;其他 sas 语句;END;关于循环 DO 语句一般格式的几点说明:(1)index-variable:控制变量,它的值控制着执行情况及执行次数。(2)

31、spacification:说明项,说明变量的起止值,规定变量的增加值。其一般格 式为:start 这里 start 是循环控制变量的起始值,当同 to stop 或 BY increment 一起使用时,必须SAS 系统与经济统计分析60是数值或产生数值的表达式。循环 DO 语句从 start 开始执行,其值在第一次循环之前被计算。当没有使用 to stop 或 BY increment 时,start 可以是数值常数或字符常数。例如:do i=3; 表示 DO 组循环一次; do i=1, 3,5,7; 表示 DO 组循环四次;do month=JAN, MAR;表示 DO 组循环二次。t

32、o stop:循环控制变量的终止值,它可以是数值或产生数值的表达式,它的值在每次循环执行前被计算。当 start 和 stop 一起使用时,循环地执行 DO 组中的语句直到循环控制变量的值大于 stop 的值为止。BY increment:规定循环控制变量每循环一次后的增加量,它一般与 start,to stop 一起使用。如没有此增量,则控制变量的值每次仅增加 1。很显然,如果增量大于 0,则start 是该循环的下界,而 stop 则是该循环的上界。如果增量小于 0,则 start 是该循环的上界,而 stop 则是该循环的下界。WHILE (expression):规定 expressi

33、on(表达式)在每次循环执行前先计算,然后根据表达式的真、假决定是执行还是不执行循环 DO 组。UNTIL (expression):规定 expression(表达式)在每次循环执行后再计算,于是在 DO 组内的这些语句被重复执行直到表达式是真的为止。【例 3.13】 利用循环语句和随机正态函数产生参数为 5 的 随机数 50 个。2解:根据题目要求,程序如下:data a(drop=i j z);do i=1 to 50 by 1; y=0;do j=1 to 5;z=normal(0);y=y+z*z;end;output;end;proc transpose out=transa;ru

34、n;proc print noobs;run;程序说明:data 语句定义了一个名为 a 的 SAS 数据集,由于选择项 drop=i j z,所以该数据集不含有变量 i,j,z。循环语句中嵌套了一个循环语句,其中,第二个循环语句产生参数为 5 的 分布随机数,这里利用了 是由标准正态分布经平方得到这一性质;第22一个循环语句产生 50 个随机数。为了使 50 个随机数按行排列,这里使用了转置过程,打印过程使用了选项 noobs,表明不输出观测序号。程序运行结果如下:第 3 章 SAS 编程基础 61输出 3.13 由循环语句和随机正态函数产生的 50 个 分布随机数26.80274 3.02

35、847 3.40320 2.82531 2.87888 6.67964 8.39475 2.40041 4.27569 2.268064.22708 5.98785 3.40582 5.10209 3.69296 2.58844 2.13481 4.82308 0.87321 2.592913.57369 12.1011 12.7229 12.6032 11.3558 14.1921 6.93884 8.03782 3.98001 1.734023.15601 4.29460 14.9750 4.70506 5.47378 3.41526 6.15517 4.62025 1.92610 2.5

36、21174.80457 4.91229 4.07016 3.66006 5.06776 6.86402 6.74476 8.27617 4.93147 3.544503. DO WHILE 语句该语句规定当 WHILE 后的表达式运行的结果为真时,重复地执行 DO 组中的语句。其一般格式为: DO WHILE(expression);这里的表达式(expression)与前面遇到的表达式是一样的,值得注意的是:其值是在每次循环开始前被计算。4. DO UNTIL 语句该语句规定直到 UNTIL 后的表达式运行的结果为真时,循环结束。其一般格式为: DO UNTIL(expression);这里

37、的表达式(expression)与 DO WHILE 语句中的表达式是一样的,值得注意的是:其值是在每次循环结束后被计算,亦即 DO 组中的语句至少被执行一次。【例 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=sum(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

38、 69 78 91 m 92 71 85;proc print;run;程序说明:这段程序利用 data 步创建了一个包括循环语句、赋值语句和累加语句在内的名为 class 的 SAS 数据集。其中,循环变量的起始值为 1,终止值为 10,步长增量为2,并满足累加变量 n 小于 2,从而当程序读入第一个观测执行到该循环语句 i=1 时,SAS系统首先对 n 和 2 进行比较。由于 n 开始为 0(系统默认),小于 2,所以系统执行该循环语句。经循环一次后,i 增加 2 为 3,累加变量 n 也加 1 变为 1,此时 n 与 2 比较仍小于2,所以继续执行一次循环语句,之后 i 变为 5,而 n

39、 也增加到 2,此时 n 与 2 再进行比较SAS 系统与经济统计分析62条件已不成立,退出循环,转而执行赋值语句:ave=sum(chinese, maths, english)/3。当系统执行完第一个观测重新读入第二个观测时,由于 n 等于 2 没变,所以直接跳过循环语句,执行此后的赋值语句,由此得到以下输出结果:输出 3.14 由循环 DO 组所创建的数据集 CLASS 的数据结构OBS SEX CHINESE MATHS ENGLISH I N TOTAL AVE1 m 82 78 69 5 2 229 76.33332 f 90 78 89 1 2 . 85.66673 m 79 8

40、6 98 1 2 . 87.66674 m 76 56 80 1 2 . 70.66675 f 72 76 81 1 2 . 76.33336 f 69 78 91 1 2 . 79.33337 m 92 71 85 1 2 . 82.6667读者可以修改上面这段程序,使总成绩没有缺省值。上述程序中,如果把 while 改为 UNTIL,则结果将大不一样,请读者自行检验。5. DO OVER 语句DO OVER 语句是用来处理具有隐含下标数组元素的循环语句。其一般格式为:DO OVER array-name;其他 SAS 语句;END;该语句对数组中的每个元素自动地执行 DO 组中的每个语句。

41、具体实例见 array 语句。3.2.3 DATA 步中的文件操作语句:连接与合并一、SET 语句SET 语句从一个或几个已存在的 SAS 数据集中读取观测形成一个新的 SAS 数据集。由于数据的读取是一个观测接着一个观测读取的,因此当读取第一个观测后,如没有其他语句则继续读入第二个观测,直至读完数据集中的所有变量和观测;当有其他语句时,SAS系统根据语句的特点决定是先执行语句后读取观测,还是先读取数据后执行语句。例如,对 WHERE 条件语句是先执行 WHERE 条件,然后把满足条件的观测或变量读入到新的数据集中;而 IF 条件语句则先读取所有的数据,然后再执行 IF 条件语句。参见子集 I

42、F 语句和 WHERE 语句的比较。1. SET 语句的一般格式第 3 章 SAS 编程基础 63SET 语句的一般格式为:SET ;由 SET 语句的一般格式可以看出, SET 语句后面可以跟多个数据集,而且数据集后面还可以有选项。注意,如果数据集后面跟选择项,则必须用圆括号(“()”)括起来。例如下面写法都是正确的。SET CLASS;读取数据集 CLASS 中的数据。SET CLASS(DROP=SEX FIRSTOBS=5);删去数据集 CLASS 中的变量 SEX,并从第 5 个观测开始读取。SET CLASS1 CLASS2(KEEP=NAME SEX TOTAL AVE);将数据

43、集 CLASS1 与数据集 CLASS2 中保留的变量 NAME SEX TOTAL AVE 进行连接。2. SET 语句的用法SET 语句一般用在以下几种场合:(1)调用一个已存在的 SAS 数据文件。即把已存在的 SAS 数据文件调到当前状态,以便对数据进行其他处理。(2)对已存在的 SAS 数据集进行修改,补充。如原数据集 CLASS 中含有三科成绩变量 chinese maths english 的 10 个观测,现在要统计出每个同学的总成绩和平均成绩,并仍作为 CLASS,SAS 程序为: data class;set class;total=chinese+maths+englis

44、h;ave=total/3;run;(3)生成已存在的 SAS 数据集的子集。这有两种情况:一是利用 KEEP、DROP 选项或语句生成部分变量子集;二是利用 WHERE 或 IF 条件语句生成部分观测子集。例如:DATA SEX;SET CLASS(KEEP=SEX);RUN ;上面这段程序生成仅含有 CLASS 数据集中的性别子集。这段程序也可以写为:DATA SEX;SET CLASS;KEEP SEX;RUN;下面这段程序将生成总分在 270 以上的观测子集。data class1;set class;total=chinese+maths+english;if total=270 then output;run;(4)把几个已存在的 SAS 数据集连接成一个新的数据集。数据集的连接是把两个或两个以上的数据集的所有观测连接在一起,从而形成一个新SAS 系统与经济统计分析64的数据集的过程。一般来说,如果没有其他特殊规定,SAS 数据集的连接过程,可以用以下的图形直观地表现出来,见图 3.1。 连 接 后 新 数 据 集 观 测 的 排 列数 据 集 连 接 DAT-SE12DAT-SEn 第 一 个 数 据 集 中 的 观 测第 二 个 数 据 集 中 的 观 测第 n个 数 据 集 中 的 观 测图 3.1 不含有 BY 语句的数据集的连

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报