Transcript SAS系统概述
第一讲:SAS系统概述 SAS(Statistical Analysis System,统计 分析系统)是20世纪60年代初推出的一种科学的 统计分析技术,如今已广泛地普及和应用于医学、 社会学、市场、经济和自然科学各个领域的信息 处理、定量研究和科研分析中。 1 .1 SAS系统的主要功能与模块 在数据处理和统计分析领域,SAS系统是大型集成 应用软件系统,具有完备的数据访问、数据管理、数 据分析和数据呈现功能。它运用统计分析、时间序列 分析、运筹决策等科学方法进行质量管理、财务管理、 生产优化、风险管理、市场调查和预测等业务,并可 将各种数据以灵活多样的各种报表、图形和三维透视 的形式直观地表现出来。 SAS系统包含了20多个模块,每个模块又包含 若干过程,主要过程有频数统计、交叉汇总表、数 据的排序分类、方差分析、相关与回归分析、制图 和制表、各种高级统计分析过程,如Conjoint(结合) 分析、Factor(因素或称因子)分析、Cluster(聚类)分 析等。 “SAS系统”窗口 常用命令 命 令 Bye 描 述 退出SAS Clear[window-name] 清除指定的窗口中的内 容 命 令 描 述 Log 进入log窗口 Nums 打开和关闭文本编辑器 的数字区 End 退出当前窗口 options 进入options窗口 file"filename" 存储到指定文件 output 进入output窗口 Help 帮助 progra m 进入program editor窗口 include"filename" 引入指定文件 recall 调出上次执行的程序 Keys 进入keys窗口 submit 提交一段程序 libname 确认SAS数据库的内容 SAS语言 SAS程序的书写规则 语句可在行的任一列开始和结束; 语句的词之间可以用一个或多个空格符或其它特殊字符隔开; 一个语句可以分写为多行(换行时,换行符相当于一个空格符) 多个语句也可以写在同一行。 但是,规则的书写格式有助于阅读和检查,也可以减少书写 错误,通常习惯使用的规则有: 不同的程序步间留有空行; 每个语句都另起一行。程序步的第一个语句和最后的RUN语 句由第一列开始书写。其它语句按程序的逻辑结构层次每层缩 进固定的列数; 语句的词之间都是固定的一个空格符。 2.1.2 数据步和过程步 数据步(Data Step): 读入源数据文件和SAS数据集,修改、编辑或创建SAS数据 集或文本文件。 过程步(Proc Step): 面向SAS数据集,完成某特定的计算、分析和呈现的功能。 每个程序步都是由若干语句构成,每个语句是由一个关 键词开始,并以分号结束。DATA语句和PROC语句分别标志 数据步和过程步的开始。RUN语句标志程序步的结束。 2.2 SAS数据集和SAS文件 SAS系统分析和呈现数据的过程只面向SAS数据集。当然,SAS也 提供了很多工具,使用户可以方便地实现许多流行数据库文件与SAS数 据集之间的转换,使用户可以面向各种格式数据文件的数据进行分析, 并按用户的需要用不同的方式呈现和提交分析的结果。 SAS系统有自己的面向对象的开发工具。为了实现存储和管理这 些面向对象的开发任务,SAS就建立目录册(Catalog)类型的文件,在 这一类文件中可以存储整个应用系统,包括它的界面、源程序和各种 对象间的连接。这些由SAS建立、维护和管理的文件都称为SAS文件。 2.2.1 SAS逻辑库 从SAS系统来看,它所建立的众多的SAS文件可按不同需要将其 归入若干个SAS逻辑库,以此来对SAS文件进行访问和管理。 SAS 逻辑库 SAS 数据集 数据表 (Data) 数据查询 (View) SAS 目录 条目 (Catalog ) 其他 SAS 文件 SAS 程序 (Program) 访问描述器 (Access) 2.2.1.1 逻辑库名和引用SAS文件 在SAS系统中,为了访问一个SAS文件,一定要为该SAS文 件所在的位置指定一个SAS逻辑库,即赋予一个逻辑库名或简称 为库名。逻辑库名的命名规则: 由英文字母(A~Z,包括大写和小写)或下划线(_)开始; 由数字、字母和下划线构成; 总共使用1至8个字符。 在指定逻辑库名以后,就可使用两级命名的方式引用SAS文 件: 逻辑库名.文件名 例如,sasuser.class是指逻辑库sasuser中名为class的SAS文件。 注意:在每个SAS进程一开始,系统就自动地指定了一些逻辑库 供用户使用,它们是WORK(临时逻辑库 )、SASHELP和SASUSER(永久逻 辑库 )。 2.3 用数据步读入数据生成SAS的数据集 SAS中基本的数据输入语句包括: DATA;(数据步的第一条语句) INPUT;(将源数据文件中的数据读入SAS数据集) LIST;(列表显示数据的输入格式,以便检查数据是否输入在 它对应的栏位上) CARDS(或DATALINES);(告诉SAS读取CARDS后面的 数据行) INFILE‘数据文件名’;(调用外部源数据文件) RUN;(表示数据步的结束) 2.3.1 数据文件格式与输入模式 2.3.1.1 按列输入模式 对字段固定格式的源数据文件,使用INPUT语句读入时,通常采 用按列输入模式。其一般格式为: INPUT 变量名[$] 开始列-结束列…; 其中,符号$为字符型变量的选项,若为数值型变量,则不必加这个 符号。 [例 2-1] 在 INPUT 语句中规定各变量的栏目位置 DATA DST.EXAM2; INPUT ID 1-2 CASID 3-5 N 6 SEX 7 AGE 8-9 EDUC 10 ocu1 11 ocu2 12 sal1 13-15 sal2 16-18 (v1-v5) (5*1.); CARDS; 11001116031015012021214 11002116542218018011210 11003215531009909512210 … ; [例 2-2] 在 INPUT 语句中规定变量的小数位 INPUT Id 1-3 Height 4-7 .1 Weight 8-11 .1 Sex 12 Age 13-14; CARDS; 00116550555145 00217001200225 … ; 注:在Height和Weight的栏位后面用“.1”表示小数位占据1位 [例 2-3] 变量及栏位的紧缩形式 INPUT (V1 V2 V3 V4)(2. 2. 2. 2.); 可改写为: INPUT (V1-V4) (4*2.); 二者均表示:变量 V1~V4 共有 4 个变量,每个变量的数据分别占有两列宽度。 [例 2-4] 用@n 跳读 INPUT @7 SEX 1. @3 CASEID 3.; CARDS; 11001116031015012021214 11OO2116542218Ol8O1121O … ; 注:SAS将从数据行的第7列开始读取SEX的变量值1位数,然后,SAS 回到数据行的第3列开始读CASEID变量值的3位数(此例读的1行的001, 其余类推)。“INPUT @n”语句一般用于读取一个现成的外部数据文件, 因此,INPUT之前应有“INFILE'数据文件名';”语句。用“+n”跳列读取数 据: +n的含义与@n不同。@n是跳读第n列开始的某变量值;而+n表示 “从当前指针位置向右空出n之后”再去读新的变量值。 [例 2-5] 用“#n”跳行读取数据 INPUT @3 CASEID 3. #2 AGE 8-9; CARDS; 11001116031015012021214 11002116542218018011210 … ; 注:SAS 从第 l 行数据的的第 3 列、第 4 列、第 5 列连读 3 列 CASEID 变量的值, 然后跳到第 2 行读取第 8 列至第 9 列的 AGE 变量的值,依次循环读取。 2.3.1.2 列举输入模式 对于自由格式的数据文件,系统根据分隔符区分各个字段,SAS采用 列举模式读入。其一般形式为: INPUT 变量名[$]…; 其中,符号$为字符型变量的选项,若为数值型变量,则不必加这个符号。 [例 2-6] 数据用一个以上的空格隔开 DATA DST.EXAM1; INPUT ID CASID NAME $ SEX AGE EDUC; CARDS; 01 0001 zhu min 1 35 18 01 0002 li min 2 25 15 … ; [例2-7] 在字符型变量后加一个字符&,把两个字符串(中间有若干空格) 作为一个整体读取。 将[例2-6]中INPUT语句改为如下格式,则能解决上例中变量NAME的值 不能正确读入的问题: INPUT ID CASID NAME $ & SEX AGE EDUC; [例 2-8] 采用跟踪符号“@@”读入一行多个观察值的数据 INPUT EDC OCU1 SAL1 @@; CARDS; 09 1 1500 12 2 1600 16 4 1500 12 2 2500 12 2 1300 14 4 1700 … ; 注:若在input语句的最后加入跟踪符号“@”,可保留input语句使用过 的数据行的剩余数据供后面的input语句使用;若在input语句的最后加 入跟踪符号“@@”,则可保留input语句使用过的数据行的剩余数据供 下一个循环使用。本例在INPUT后面用两个“@@”跟踪符号,因此每 行数据可以安排几个观察值(这里是3个观察值),每个观察值分别有3 个变量值。 2.3.1.4 用INFILE语句调用外部数据文件 使用INFILE语句时,必须建立两个文件,一个是纯命令文件, 另一个是纯数据文件。例如,首先要建立以下的命令文件(即程序)。 DATA older; INFILE 'older.dat'; /*调用当前目录中的older.dat数据文件*/ INPUT ID1 1-2 CASEID 3-5 S EX 7; 其他数据转换语句; RUN; 其次要在当前目录建立older.dat纯数据文件。 2.3.1.5 通过CARDS命令(或DATALINES命令)读取数据 用CARDS(或DATALINES)命令导读CARDS后面的数据。 CARDS语句的位置如下: DATA 数据集名; INPUT 变量名列表; LIST; CARDS(或Datalines); 数据行 RUN; 2. 4 数据的输出格式 2.4.1 用FORMAT指定输出格式 可以在数据步的INPUT语句后加入FORMAT语句,其一般形 式为: FORMAT 变量名 输出格式…; [例 2-10] 源数据文件 imptdt02.dat 包含如下数据 01MAR90LON198 02MAR90FRA207 03MAR90LON205 在数据步的 INPUT 语句后加入 FORMAT 语句,就可使变量 date 以习惯的(年月-日)格式显示,程序如下: data indt02; infile dst(imptdt02);/*全屏显示 imptdt02 数据文件内容*/ input date dat7. dest $3. boarded 3.; format date yymmdd10.; run; 2.4.2 用PUT语句改变输出格式 语句格式如下: PUT <<'字符串'> <变量名<=>><对象.属性<=>>> | _ALL_; [例 2-11] 用 PUT 语句改变输出格式 DATA dst.l1; INPUT id 1-2 sex $ 4 age 5-6 height 8-10 weight 12-14 .1; PUT id sex age; /*显示 3 个变量之值*/ PUT id= weight=; /*在等号后面显示变量值*/ PUT '学生代号是:' id '身高=' height '体重=' weight;/*先显示单引号中的字符串, 再显示其后变量的值*/ LIST; /*为显示观察值之用*/ CARDS; 01 M19 173 672 02 M20 175 575 03 F19 160 540 04 M21 176 700 05 F20 158 585 ; PROC PRINT; /*调用过程 PRINT 在输出窗口输出数据集*/ RUN; 注:@符号与 PUT 连用时,可用以限定字符串所在的起始位置。比如, “@8”表示从每行的第 8 列位 置开始显示。 2.4.3 用LABEL语句定义变量标签 由于 SAS 或 SPSS 等统计软件的变量名必须以字母为首而且不能超过 8 个字符, 所以, 当一个变量名不足以说明变量的真正含义时, 则用 LABEL 语句解释变量名。LABEL 语句的格式为: LABEL 变量名='标签'; 其中,“变量名”应是 INPUT 语句中已定义的某个变量名。“标签”则是对变量名的 更详细更明确的注解,可放在程序的 DATA 语句的后面。标签内容可以是英文(或汉语 拼音或汉字),长度在 40 个字母以内。 [例 2-12] 用 LABEL 语句定义变量标签 DATA OLDER; LABEL D1='地区名称'; CASEID='观察值编号'; EDC='老年人的教育水平'; OCU1='退休前的职业'; INFI LE 'OLDER.DAT'; INPUT D1 1-2 CASEID 3-5 SEX 7 AGE 8-9 EDC 10 OCU1 11 OCU2 12; 2.4.4 用FORMAT过程定义数值标签 计算机所读取的数据一般是数字或字母。为了让他人能读懂数据(比如 1 2 3) 的真正含义。通常,还应在命令文件或程序中,用 FORMAT 命令解释数值,这就 是所谓的数值标签,其格式如下: PROC FORMAT; VALUE 格式名 值范围 1='标签 1' 值范围 2='标签 2' …; run; 注:值范围可采用 LOW-值 1,值 2-值 3,…,值 k-HIGH。其中“LOW”表示最低 值; “-” 表示 “至” ; “HIGH”表示最高值。 [例 2-13] 数值标签的定义 DATA OLDER; LABEL ID1='地区名称' EDC='老年入的教育水平' OCU1='退休前的职业' OCU2='退休后的职业'; INFILE 'OLDER.DAT'; INPUT ID1 1-2 CASEID 3-5 NAME 6 SEX 7 AGE 8-9 EDC 10 OCU1 11 OCU2 12; PROC FORMAT; VALUE SEXFMT 1='男' 2='女'; VALUE OCUFMT 1='工人' 2='干部' 3='商业服务人员' 4='教师' 5='科技人员'; PROC FREQ; /*执行 FREQ 过程*/ FORMAT SEX SEXFMT.; TABLE SEX; PROC MEANS; VAR SEX EDC OCU1; RUN; 程序中包含有 VALUE 及 FORMAT 等定义数值标签的语句 2.4.4.2 数值标签的存储和调用 使用过程 FORMAT 可以按需要定义各种数值标签(输出格式) ,一个数值标签一旦 定义,就保存在 SAS 逻辑库的一个名为 FORMATS 的目录册(Catalog)之中。为了在定 义数值标签时将其存入指定的逻辑库,可在过程 FORMAT 的 PROC 语句中加入选项: PROC FORMAT LIBRARY=库名; 为了在以后使用时能直接由某个逻辑库中调用已定义的数值标签,可在程序中加 入选项 FMTSEARCH,来指定搜索的逻辑库和目录册。其格式为: OPTIONS FMTSEARCH=(库名 1 库名 2…); 2.4.5 用 LIST 语句显示数据 LIST 命令一般是写在 INPUT 命令的下一行,用于显示数据格式是否对应其栏位, 以便检查数据有无错误或错位。例如: DATA DST.SALARY; INPUT EDC OCU1 SAL1 @@; LIST; CARDS; 09 1 1500 12 2 1600 16 4 1500 12 . 2500 12 . 1300 14 4 1700 … ; INPUT 语句的后面写上了 LIST 命令时,SAS 则会显示标尺行并在标尺下面给出数据列 表。 RULE: 一 1—2—3 一 4 一 5—6—7—8—9—1O 2.4.6 缺失值的表示法 如果被访者对于问卷中的某一个问答(变量)避而不答或答得含混不清,这时可把 该变量值指定成缺失值(Missing Values)。输入数据时,遇到此类缺失值可用一个圆 。 ” ”表示。比如下面数据行中第 2 行的 OCU1 变量有两处出现缺失值“. 点“. INPUT EDC OCU1 SAL1 @@; CARDS; 09 1 1500 12 2 1600 16 4 1500 12 . 2500 12 . 1300 14 4 1700 … ; 2.5 读入数据的选取 2.5.1 IF语句 有些操作命令通常要以IF语句为先决条件,符合IF语句中的条件 时,则可执行DELETE(也可执行GO TO、SUM或LIST)以及赋值等 命令语句。 [例 2-14] 使用 IF 语句选取数据 DATA OLDER; INFILE 'OLDER.DAT'; INPUT I D1 1-2 CASE D 3-5 SEX IF SEX EQ 1 THEN DELETE; 6 AGE 8-9; /*删去性别为男性的观察值*/ LIST; /*列出 SEX=1 以外的所有观察值的变量值,即列出女性的变量值*/ RUN; 不管是微机 SAS 还是非微机 SAS,条件表达式中都允许使用“+、-、*、/、**”5 种算术运算符和“>、>=、<、<=、=、~=”6 种关系运算符;都有“与”、“或” 、“非” 3 种逻辑运算符“&、|、~”。 [例如 2-15] IF 条件中使用关系运算符 IF X+Y=100 THEN LIST; IF Z>Y THEN Y=X*5; ELSE Y=X; [例 2-16] IF 条件中使用逻辑运算符 IF X1=Y1|X2=Y2 THEN LIST; [例 2-17] 用 DELETE 语句删除数据 DATA XSQ; INFI LE 'XSQ.DAT'; INPUT ID1 1-2 CASEID 3-5 N 6 SEX 7 AGE 8-9; IF SEX = 1 THEN DELETE; /*删去男性的数据*/ LI ST; DATA XSQ2; SET XSQ; /*新的数据集名为 XSQ2*/ /*新的 XSQ2 数据集是从第一个数据集“XSQ”中复制的*/ IF AGE<50 & SEX=0 别=0(误码)时则删去*/ LIST; RUN; THEN DELETE; /*如果年龄小于 50 岁,而且,性 [例 2-18] 用 GO TO 语句实现转移 DATA EXAM; INPUT V1 V2 V3; IF 70<=V1<=80 THEN GO TO OK; V2=1; COUNT+1; /*求和语句,对变量 COUNT 进行累加*/ DELETE; /*删除不符合条件的观察*/ RETURN; /*返回数据步的开始*/ OK: SUMX+V1;SUMY+V2; /*SAS 允许一行书写多个语句*/ LIST; CARDS; 75 83 90 68 75 80 90 100 75 … RPOC PRINT; /*输出数据集的数据部分*/ RUN; 2.5.2 用RETAIN语句预置变量值 在数据步执行的每次循环中,RETAIN语句将指定的变量初始化。 由于RETAIN命令不是过程(PROC),因此它可放在程序的任何位置。 其命令格式为: RETAIN 变量1 初值1 变量2 初值2…; [ 例 2-19] 假 设 某 班 前 5 名 学 生 的 语 文 、 数 学 、 英 语 三 科 成 绩 ( 文 件 名 D:\DST\Score.Dat)如下: 80 70 98 75 88 93 86 . 95 93 97 89 . 99 86 其中有两名学生分别缺考语文、数学,所以在数据行中相应地输入“.”符号。现 在需要统计这五名学生的语文总分、数学总分、英语总分各为多少。 DATA score; RETAIN count schi smath seng 0; LABEL chi='语文成绩' math='数学成绩' eng='英语成绩' schi='全班语文 成绩'; INFILE 'd:\dst\Score.dat'; INPUT chi math eng; count+1; schi+chi; smath+math; seng+eng; PROC PRINT; RUN; 注 1:若将[例 2-19 中]的求和语句分别替换为下列赋值语句实现累加 (变量= 表达式;),则为排除缺失值的累加:即遇到原数据如“chi=.”时不往下继续累加, 。 因此其和 schi 也是一个缺失值“.” schi=schi+chi; smath=smath+math; seng=seng+eng; 注 2:若将[例 2-19]中的求和语句改为如下用“SUM 函数”求和(新变量=SUM(新 ,则是包含缺失值的累加,将得到类似[例 2-19]的统计结果。 变量,老变量);) schi=sum(schi,chi); smath=sum(smath,math); seng=sum(seng,eng); 2.6.1.1 问卷设计简例 在社会调查与市场研究中,有多种调查研究方法 (如总卷调查法、文献追踪法、内部资料调研法、访谈 调查法、亲自实践法等)。目前,绝大多数是采用发放 问卷的形式采集原始数据。然后,把反馈而来的问卷编 码成计算机统计软件所能识别的数码。 下面举一个简单问卷设计如表2-1所示: 表 2-1 我国部分地区 2001 年人员基本情况调查表 地区编码:11 观察值编码:001 一、性别:1-男 ,2-女 二、居住状况: 1-单身居住,2-两人以上居住 三、居住地: 1-城市, 2-县、镇 , 3-乡村 四、户口特征:1-农业户口, 2-非农业户口 五、年龄: 1-12-19 岁, 2-20-29 岁, 3-30-39 岁, 4-40-49 岁, 5-50-59 岁 ,6-60 岁 以上 六、文化程度:1-文盲, 2-小学, 3-初中 , 4-高中或中专, 5-大专, 6-本科以上 七、职业:1-企业家/经理/厂长工人, 2-干部(包括职员) ,3-一般职员/工人, 4-个体户, 5-教师/科技人员/医生, 6-农民, 7-离退休人员, 8-现役军人, 9-学生 ,10-无业人员 ,11-其他 八、个人月收入(含工资、奖金和其他) :1-250 元及以下, 2-251-500 元, 3-501-750 元, 4-751-1000 元 , 5-1001-1500 元 , 6-1500-2000 元, 7-2000-3000 元, 8-3000 元以上 九、家庭月收入:1-500 元以下, 2-501-1000 元, 3-1001-1500 元 ,4-1501-2000 元, 5-2001-2500 元, 6-2501-3000 元 ,7-3001-4000 元 ,8-4001-5000 元, 9-5000-6000 元 ,10-6000 元以上 2.6.1.2 数据编码 观察值(OBS):表 2-1 是一份抽样调查的问卷,也称为“一个观察值”或一个 OBS。 在数学上,每一个可能的观察值称为个体。 变量及变量名:如同表 2-1 所示,一份问卷设有若干问答,每一问题则是一个变 量。表 2-1 中共有 9 个问题,加上地区编号和观察值编码,一共有 11 个问答。因 此,该份问卷一共有 11 个变量;为使计算机可读起见,每个变量必须赋予唯一的 变量名。SAS 规定每个变量名必须不超过 8 个字符,而且变量名必须以字母为首。 比如,用 ID1 表示“地区编号”的变量名是正确的,但用 1ID 则是错误的。 变量类型及变量值:同一个变量必须赋予同一类型的数据(变量值)。用阿拉伯数 字表示变量值时,称该变量为“数值型”变量(或数字型变量)。变量值若用字母(或 字母与数字的混合型)表示时,则称该变量为“字符串型”变量;此时,定义变量 时该变量名的后面必须附加一个美元符号“$”;比如,姓名的变量名往往要定义 为“NAME $” ,表示与它对应的变量值将是由字母组成的人名,比如张三(或 Zhang San)、李四(或 Li Si)等。 变量值的栏目位置(栏位):计算机在读取变量值时,总是按照人为指定的“栏位” 一一对应地读取数据。所以,数据输入的次序,必须与所定义的变量名的先后次 序及指定的“栏位”一一对应,不能错位。而且, “固定格式”变量值必须输入在 固定的栏位上。为此,每一个变量名的后面,还应该指定该变量值的起始列和终 止列。比如表 2-2 的性别编码为“sex 6”,年龄编码为“age 10”等。如果是字 符型(比如“name $ 19-29”)的变量值时,由于栏位是“19-29”,则表示所有的 人名都应输入在每行的第 19 列~第 29 列上。 变量值的栏位数视问卷中该变量值的最大长度而定。比如,3 个汉字的人名,若 用汉语拼音时,则可多达 20 个字母。因此,指定栏位时,必须依上限而定。因而, 此处定义为“name $ 19-29” 。 2.6.1.3 一个数据编码方案 表 2-2 对表 2-1 的数据编码 变量 变量名 栏位 编码 地区编号 观察值编码 性别 居住状况 居住地 户口特征 年龄 文化程度 职业 个人月收入 家庭月收入 id1 caseid sex status reside reg age edc ocu icm1 icm2 1-2 3-5 6 7 8 9 10 11 12-13 14 15-16 11 001 1 2(两人以上居住) 1(城市) 2(非农业户口 6-60 岁以上 3(初中) 1(企业家/经理/厂长) 8(3000 元以上) 10(6000 元以上) 2.6.2 一个简单的SAS编程 [例 2-20] 某些地区人员基本情况抽样调查 SAS 程序例。 DATA base; /*读取的数据存入 base 数据集*/ INPUT id1 1-2 casedid 3-5 sex 6 status 7 reside 8 reg 9 age 10 edc 11 ocu 11-13 icm1 14 icm2 15-16; LIST; /*显示每行的数据,以便核对。可省略*/ CARD; /*告诉 SAS,数据行从下一行开始读起*/ 0100112124602607 0100222124303607 … 0103022121409103 ; PROC PRINT; /*显示观察值,可省略*/ TITLE '某些地区人员基本情况抽样调查'; /*TI TLE' '中的内容是标题名 称*/ PROC PLOT; /*绘制散点图*/ PLOT edc*ocu=sex; /*以性别 1 或性别 2 为图点的记号,画出教育水平与职 业两变量值的纵横交点,组成一幅散点图*/ PROC CHART; /*调用直方图、条形图过程*/ VBAR ocu; /*画出职业的垂直条形图*/ HBAR sex; /*画出性别的水平条形图*/ PROC FREQ; /*调用频次统计过程*/ TABLES edc;/*计算 EDC 的频次*/ TABLES edc*icm1;/*制作交互分类表*/ PROC MEANS; /*调用 MEANS 过程,计算上述 edc、ocu 和 icm1 各个变量的 均值、观察值和方差等 9 种参数*/ PROC SORT; /*调用 SORT 过程*/ BY sex edc;/*按性别、教育年限排序*/ PROC PRINT; /*有了此条语句才能显示排序结果*/ PROC MEANS; /*再次调用 MEANS 过程,以便计算 8 种描述性统计量*/ BY sex edc; RUN; 命令*/ /*按 sex、edc 变量值分组,计算描述性统计量*/ /*微机 SAS 须有 RUN 命令。大、中、小型机中的 SAS 则不需要 RUN