第六章[SAS过程中常用语句]
- 格式:doc
- 大小:52.00 KB
- 文档页数:7
sas 循环语句SAS循环语句是SAS程序中常用的控制结构之一,它可以重复执行一段代码,从而简化程序的编写和执行过程。
下面列举了十个常用的SAS循环语句及其用法。
1. DO UNTIL循环DO UNTIL循环是一种前测试循环,它会在每次迭代之前检查条件是否为真。
如果条件为假,则退出循环。
```sasdata test;do i = 1 to 10 until (i > 5);x = i;output;end;run;```2. DO WHILE循环DO WHILE循环是一种后测试循环,它会在每次迭代之后检查条件是否为真。
如果条件为假,则退出循环。
```sasdata test;do i = 1 to 10 while (i <= 5);x = i;output;end;run;```3. DO循环DO循环可以指定循环的开始和结束值以及循环的步长。
在每次迭代中,循环变量会自动增加或减少指定的步长。
```sasdata test;do i = 1 to 10 by 2;x = i;output;end;run;```4. DO OVER循环DO OVER循环可以在数组或变量列表上循环执行一段代码。
在每次迭代中,当前数组元素或变量会自动被选中。
```sasdata test;array arr[3] a b c;do over arr;x = arr;output;end;run;```5. DO INDEX循环DO INDEX循环可以在每次迭代中指定一个索引变量来跟踪循环的当前位置。
索引变量的值从1开始递增。
```sasdata test;do index = 1 to 10;x = index;output;end;run;```6. DO WHILE-WEND循环DO WHILE-WEND循环是一种后测试循环,它会在循环体中的WEND语句之前检查条件是否为真。
如果条件为假,则退出循环。
Ⅰ.用在DATA步的文假作语句1.DATA语句表示一个数据步的开始, 并给出正被创建的SAS数据集的名字。
(1)格式: DATA [SASdataset[(dsoptions)]]…;(2)说明: SASdataset是这个DATA步正被创建的一个或几个SAS数据集的名字;dsoptions告诉SAS系统关于正被创建的SAS数据集的更多的信息。
(3)SAS数据集的名字的种类①省略数据集名DATA; 等价于写: DATA _DATA_;每运行一次,SAS系统自动给创建的数据集依次命名为DATA1, DATA2, …。
②单水平名字DATA ABC; SAS系统自动命名为WORK.ABC,这里WORK是隐含的第一水平名字,即库名, 彻底退出SAS系统时,此数据集就消失了, 故称为临时数据集。
ABC是第二水平名字,它可以由不超过8个字符组成。
③双水平名字DATA WWW.ABC; 这里WWW是库标记, 它靠LIBNAME语句建立起与某个目录之间的联系,如: LIBNAME WWW 'C:\HULP'; DATA WWW.ABC;枕明想在C盘的目录名为HULP下建立一个名为ABC.SSD的永久数据集,“.SSD”是SAS系统自动加的, 此文件只供SAS系统调用,用户无法直接阅读。
调用方式为:LIBNAME WWW 'C:\HULP';PROC 过程名DATA=WWW.ABC;再写其他SAS语句。
④特殊的数据集名DATA _NULL_; 和 DATA _LAST_;前一个语句表明只想用PUT语句来输出一些结果, 但不想创建SAS数据集,可减少使用计算机的资源; 后一个语句表明SAS系统使用一个称为_LAST_的特殊自动变量来保留在一个SAS 程序里最新创建的SAS数据集。
注意: 在进入SAS DMS后要建立的第一个数据集名不能用_LAST_。
⑤同时使用多个数据集名如果你想对一组含有年龄和另外10个变量的资料按青年、中年、老年创建三个数据集, 可用如下的方法实现: DATA ONE TWO THREE; INPUT AGE X1-X10; IF AGE<=35 THEN OUTPUT ONE;ELSE IF AGE>35 AND AGE<=55 THEN OUTPUT TWO;ELSE IF AGE>55 THEN OUTPUT THREE; CARDS;(4)dsoptions(即SAS数据集的选择项)注意∶下面的②、⑥两个选择项仅当读已存在的SAS数据集时有效。
Engine(引擎)是一种访问架构,SAS系统通过它迅速地对其它数据库管理系统中文件进行读入和写出。
1.LIBNAME语句1.1解读定义SAS 逻辑库。
具体地说,它可以(1)向SAS 标识SAS 逻辑库(2)将引擎与逻辑库关联(3)让您指定逻辑库的选项(4)为逻辑库指定逻辑库引用名通俗得讲,LIBNAME语句把一个libref(库标记名)和一个目录联系起来,使用户可以在SAS语句中使用库标记来指示这个目录。
提交该程序时自动引用该SAS 逻辑库1.2 语句格式1、LIBNAME libref <engigne><'SAS-data-library'><Access=Readonly|Temp>;2、LIBNAME libref Clear;3、LIBNAME libref |_ All_ List;三种格式反映了LIBNAME语句的三种用法选项说明2.length语句SAS变量的基本类型有两种:数值型和字符型。
数值型变量在数据集中的存贮一般使用8个字节。
SAS的字符型变量缺省的长度是8个英文字符,可以使用LENGTH语句指定变量长度,LENGTH语句一般应出现在定义变量的Input语句之前,格式为:LENGTH 字符型变量名$长度例如:length name $20 ;3. input 语句3.1解读INPUT语句用于向系统表明如何读入每一条记录。
它的主要功能有:读入由语句指定的数据列;为相应的数据域定义变量名;确定变量的读入模式(共有四种模式:column模式,formatted模式,list模式及named模式)。
input语句执行后,SAS将读取的数据暂时先保存在内存缓冲区,然后执行后面的语句,后面的语句可以对暂存在内存缓冲区中的变量值进行修改,到最后才将整条数据写入数据集,写入数据集的数据就不能在当前data步中再修改。
注意:INFILE语句用于确定一个包含原始数据的外部文件,必须在执行INPUT语句前执行,如果要在程序中直接嵌入数据,就用CARDS语句代替INFILE 语句。
SAS中用到的SQL语法及结构在SAS中使用SQL语言,可以对数据进行查询、插入、更新和删除等操作。
以下是SAS中常用的SQL语法及结构的详细介绍。
1.SELECT语句:用于查询数据表中的数据。
SELECT column1, column2, ...FROM table_nameWHERE condition;示例:SELECT*FROM employeesWHERE department = 'HR';2.INSERTINTO语句:用于向数据表中插入新的记录。
INSERT INTO table_name (column1, column2, ...)VALUES (value1, value2, ...);示例:INSERT INTO employees (name, age, department)VALUES ('John Smith', 35, 'Finance');3.UPDATE语句:用于更新数据表中的记录。
UPDATE table_nameSET column1 = value1, column2 = value2, ...WHERE condition;示例:UPDATE employeesSET department = 'IT'WHERE name = 'John Smith';4.DELETE语句:用于从数据表中删除记录。
DELETE FROM table_nameWHERE condition;示例:DELETE FROM employeesWHERE age > 50;5.DISTINCT关键字:用于查询唯一的记录。
SELECT DISTINCT column1, column2, ...FROM table_nameWHERE condition;示例:SELECT DISTINCT departmentFROM employees;6.ORDERBY关键字:用于对查询结果进行排序。
常用sas语句总结第一篇:常用sas语句总结Engine(引擎)是一种访问架构,SAS系统通过它迅速地对其它数据库管理系统中文件进行读入和写出。
1.LIBNAME语句1.1解读定义 SAS 逻辑库。
具体地说,它可以(1)向 SAS 标识 SAS 逻辑库(2)将引擎与逻辑库关联(3)让您指定逻辑库的选项(4)为逻辑库指定逻辑库引用名通俗得讲,LIBNAME语句把一个libref(库标记名)和一个目录联系起来,使用户可以在SAS语句中使用库标记来指示这个目录。
提交该程序时自动引用该 SAS 逻辑库 1.2 语句格式1、LIBNAME libref ;2、LIBNAME libref Clear;3、LIBNAME libref |_ All_ List;三种格式反映了LIBNAME语句的三种用法选项说明LibrefEngineSas-Data-LibraryAccess=Readonly|TempClear_All_List规定逻辑库规定引擎规定主机系统下一个有效的物理地址规定逻辑库为只读或可修改属性清除与库标记的联系列出所有逻辑库的属性在Log窗口列出逻辑库的属性。
2.length语句SAS变量的基本类型有两种:数值型和字符型。
数值型变量在数据集中的存贮一般使用8个字节。
SAS的字符型变量缺省的长度是8个英文字符,可以使用LENGTH语句指定变量长度,LENGTH语句一般应出现在定义变量的Input语句之前,格式为: LENGTH 字符型变量名 $长度例如:length name $20 ;3.input 语句3.1解读INPUT语句用于向系统表明如何读入每一条记录。
它的主要功能有:读入由语句指定的数据列;为相应的数据域定义变量名;确定变量的读入模式(共有四种模式:column模式,formatted模式,list 模式及named模式)。
input语句执行后,SAS将读取的数据暂时先保存在内存缓冲区,然后执行后面的语句,后面的语句可以对暂存在内存缓冲区中的变量值进行修改,到最后才将整条数据写入数据集,写入数据集的数据就不能在当前data步中再修改。
第六章用SAS软件作统计分析本章我们将介绍如何利用SAS软件从事多种统计分析,比如计算分布频数,建立两个或多个变量的交叉表格,作统计描述,计算相关系数,以及作回归分析和方差分析等等。
我们先介绍关于计算分布频数和建立交叉表格的SAS指令。
一、用SAS程式计算分布频数和建立交叉表格:SAS软件的指令PROC PREQ,是专门用于计算分布频数,以及对单变量、双变量交叉和多变量交叉相适应的一般统计分析结果的子程式。
1.单变量的频数计算:频数分布计算指令PROC FREQ,属于SAS程式PROC部分中的指令,必须放在DATA部分的指令之后。
频数计算指令的一般表达式是这样的:TABLES 一个或一组被选定变量名单/B选择指令(可加可不加,通常不加) (可加可不加,视需要而定);选修** “A选择指令”的主要关键词是ORDER,其目的是使频数计算的结果按不同的标志排列打印,有下列几种主要指令可供用户选择:A选择指令意义ORDER=FREQ 按频数分布的大小从大到小排列ORDER=DATA 按数据的出现顺序排列PAGE 一页印一张表格.. (参Legros P48). **下面是一个单变量频数计算的指令实例:如: PROC FREQ; TABLES V1 V5-V10;程式执行后这条指令将产生V1,V5,V6,V7,V8,V9与V10,共七个变量的分变量频数表;在表上将给出以下计算结果:①每一个变量取值的分布频数(调查总体中对应于每一个变量值的样本个数)。
如变量V14,共有“.”,1,2,3四个取值;“.”的有1人,答“1”的有883人,答“2”的有15人,答“3”的有1人。
“. ,1,2,3”累计共900人,即调查总体含900人(参见Legros 附页P62)。
②每一个变量取值在总体中的分布频率。
如上例,答“.”的(拒答或nsp)有1人,其百分比为1/900*100%=0.1%;答“1”的有883人,占883/900*100%=98.1%;答“2”的有15人,占15/900*100%=1.7%;答“3”的有1人,占0.1%。
; 循环体 ;end ; SAS 特有的循环语句) =值1,值2,…, end ; 表达式); 循环体 ; 至少执行一次循环表达式); 循环体 在LOG 窗口显示n=0,n=1 ; (n<3); PUT n=; n+1; 循环体 END ; ; (n>=3); PUT n=; ; 循环体 END ; 语句 ; DELETE () , ; 40者的信息 将当前观测送入数据集自动方式和OUTPUT 在数据步程序中不出那么,(一般是RUN 语句)2.利用OUTPUT OUTPUT 语"失效, 通过执行 PROC VAR 变量表; VAR 语句时, 系统依据BY ; BY x ; CLASS 变量表; CLASS 变量1="字符串1" 变量变量n="字符串n" i i 变量; (列)变量; ;下列程序可以将SAS 数据集又转换dBASE 的库文件:;;;(PLOT);;;;;PROC GPLOT ;PLOT y*x ;RUN ;过程的格式选项1;图形说明1 图形说明2 /选项2; ;1:数据集名 指定绘图数据集。
语句后可以有一个或多个图形为纵轴,x 为横轴,图形用默 "A"形成。
2有::将PLOT 后的多个图形说明 ;这里的m 和n 是正 m 为指定的每页行数,n 为每行 和n 。
过程格式选项;语句;];数据集名 指定被转置的数据名 数据集被转置后,原 ?本选项中的“SAS”名就是为新变 SAS 名”后接自然数来数据集名 给定转置后的新数 DATAn 。
名 SAS 名将作为转置后的其值为原数 _NAME_的变量。
关键字(Keywords 或 Reserve )是系, 如例中PUT 、、FORMAT 、PROC 、 INFILE 和DO 都是SAS 语句除了赋值、累加、注释、 名(SAS Name )后跟字母、数字或下SAS 名中出现。
sas语句及解释2语法:TSCSREG过程的语法格式为:PROC TSCSREG options;ID cross-section-id-variable time-series-id-variable;MODEL dependent = regressor-variables / options;label: TEST equation [,equation... ];2.1 TSCSREG语句PROC TSCSREG的选项如下:DATA= SAS-data-set指定SAS数据集。
这个数据集必须事先按照先单位,后时间的顺序排列好。
TS= number用于balanced data。
如果没有ID语句,这个TS语句是必需的。
指明每个横截面单位的时间序列个数T。
CS= number用于banlanced data.指明横截面单位个数N。
OUTEST= SAS-data-set指定一个输出数据集,保存估计的结果。
这个数据集里包含许多内容。
可以包含估计结果,系数的协方差矩阵。
这个可以由IML过程读入进行一些计算。
OUTCOVCOVOUT把估计的协方差矩阵输出到OUTEST=指定的输出数据集中。
OUTCORRCORROUT把估计的协方差矩阵输出到OUTEST=指定的输出数据集中。
2.2 ID 语句ID cross-section-id-variable time-series-id-variable;ID语句指明数据集中的单位变量,时间变量。
例如:proc sort data=a;by state date;run;proc tscsreg data=a;id state date;... etc. ...run;ID语句可用在unbalanced data中。
此时SAS的处理方法是取最小的Ti为T,丢掉其他数据。
2.3 MODEL 语句MODEL response = regressors / options;指明解释变量,被解释变量。
sas中do语句SAS中的DO语句是一种循环控制语句,用于重复执行一段代码块,直到满足一定条件后才停止循环。
下面将介绍一些DO语句的常见用法和注意事项。
1. DO UNTIL循环:这种循环会先执行一次代码块,然后检查条件是否满足,如果不满足则继续执行代码块直到条件满足为止。
```sasdata work.test;do until (age > 18);age + 1;output;end;run;```2. DO WHILE循环:这种循环会先检查条件是否满足,如果满足则执行代码块,然后继续检查条件是否满足,直到条件不满足为止。
```sasdata work.test;do while (age <= 18);age + 1;output;end;run;```3. DO循环控制变量:在DO语句中可以使用控制变量来控制循环的次数,通常使用一个变量来计数。
```sasdata work.test;do i = 1 to 10;output;end;run;```4. DO循环嵌套:可以在一个DO语句中嵌套另一个DO语句,这样可以实现多层循环。
```sasdata work.test;do i = 1 to 5;do j = 1 to 3;output;end;end;```5. DO语句中的EXIT语句:可以使用EXIT语句来提前结束循环,即使循环条件还没有满足。
```sasdata work.test;do i = 1 to 10;if i = 5 then exit;output;end;run;```6. DO语句中的LEAVE语句:可以使用LEAVE语句来跳出当前循环,并进入下一次循环。
```sasdata work.test;do i = 1 to 10;if i = 5 then leave;output;end;run;7. DO语句中的ITERATE语句:可以使用ITERATE语句来跳过当前循环中剩余的代码,直接进入下一次循环。
SAS过程步简介SAS过程步的一般形式为:PROC 过程名 [ DATA=输入数据集] [选项];过程语句1 [/ 选项 ];过程语句2 [/ 选项];……RUN;1.VAR语句VAR语句在过程步中用于指定分析变量。
VAR语句的语法格式为:VAR 变量名1 变量名2 … 变量名n;变量名列表可以使用省略的形式,如x1-x3 等。
应用实例:var math chinese;2.MODEL语句MODEL语句在统计建模过程中用来指定模型的形式。
语法格式为:MODEL 因变量 = 自变量列表 / 选项; 应用实例:model y=x1 x2 x3 ;3.BY语句BY语句在过程步中用来指定一个或几个分组变量,根据这些分组变量值可以把观测记录分组,然后对每一组观测分别进行指定的分析。
在使用带有BY语句的过程步之前,应先用SORT过程按BY语句指定的变量对数据集排序。
例如,假设我们已经把class1数据集按性别排序,则下面PRINT 过程可以把男、女生分别列出:proc print data=class1 ; by sex;run;4.OUTPUT语句过程步中经常用OUTPUT语句指定输出结果存放的数据集。
不同过程中把输出结果存入数据集的方法各有不同,OUTPUT语句是使用频繁的语句之一。
其语法格式为:OUTPUT OUT=输出数据集名关键字=变量名关键字=变量名…;其中用OUT=给出了存放结果数据集的名字,关键字用于定义输出变量名,用“关键字=变量名”的方式指定了系统自动输出变量与存储变量之间的对应关系。
等号后面的变量名指定了输出数据集中的存储变量名称。
例如:proc means data=data_prg.class1; var math; output out=result02 n=n mean=meanmath var=varmath;run;proc print data=result02; run;在DATA步中也可以用FORMAT语句规定变量的输出格式,用LABEL 语句规定变量的标签,用LENGTH语句规定变量的存储长度,用ATTRIB语句同时规定变量的各属性。
sas输⼊输出数据的相关语句output、put、remove、replace、file、。
index: output put replace file infile没⼈任何规定的输出语句,sas系统会输出pdv当前观测到主数据集原先的位置output语句: TIPS: 1:当output没有规定数据集名字时,把当前观测《也就是⼀⾏数据》输出到data步后⾯的所有数据集的末尾<注意是所有数据集>意味着纵向合并,当规定数据集名字时,把pdv当前观测输出到output规定的数据集末尾。
2:在有output语句和run语句同时存在的data步⾥⾯,pdv只会执⾏output的结果到正在被创建的数据集,⽽执⾏run语句的结果是pdv会清空所有的变量为缺失。
3:如果⼀个output语句出现在程序语句中间,⽆论有没有被执⾏,后⾯的语句都将继续被执⾏,但是不会输出结果到正在被创建的输出数据集,⽽是会持续清空pdv中所有变量值(使⽤retain性质的语句除外). 4:sas中有implicit output和explicit output,在每⼀轮data循环后,sas会默认的将pdv中的数据写⼊数据集,这就是implicit output,还有⼀类是⽤户明确写的output语句,也就是explicit output,当明确规定后,隐式的output就不会再执⾏了。
5:output是将数据输⼊数据集,put是将数据输⼊⽂件或⽇志*需求:输出by组的最后⼀⾏观测值并将上⼀⾏的y值输出;data a;input x y@@;cards;11012012002302403503604703804400;run;proc sort data=a;by x;run;data res;set a;by x;retain rt; *如不⽤retain,下⾯的put能输出正确的值,但是运⾏到run后会⾃动清空,这样output的结果集中rt都会为缺失值;if first.x then rt=0;if last.x then output;rt = y;put rt=;run;proc print data=res noobs;*由⼀个输⼊数据⾏输出多条观测;data a;input id x1-x3;cards;101102030102405060;run;data b;set a;x = x1; output;x = x2; output;x = x3; output;output;run;data c1 c2;*根据条件选择输出; set sashelp.class; if _n_ le 7 then output c1; else output c2;run;*输出每个by组的最后⼀条观测和倒数第⼆条的y值;data a;input x y@@;cards;11012012002302403503604703804400;run;proc sort data=a;by x; run;data b;set a;by x;retain rt;if first.x then rt=0;if last.x then output;rt = y;run;/*读⼊第⼀条观测值时,rt被置为0,last.x为0不执⾏,rt=10,执⾏run,retain的rt保留在pdv中,因为output和run同时存在时run不会输出数据,只有output执⾏的时候rt才会被输出,当读⼊第⼆条观测的时候output也不执⾏,但是这时的rt是保留的第⼆条观测值的y,当读⼊第三条观测的时候output执⾏,顺便输出pdv中的rt,这时的rt是倒数第⼆条观测值的rt,还没有进⾏赋值*/remove语句If you specify no argument, the REMOVE statement deletes the current observation from all data sets that are named in the DATA statement.remove和delete和if⼦句都能起到获取部分数据集的效果,但是delete和if都perform only on physical但是remove既可以logical也可以physical,对于不同的引擎。
06. 使用SAS函数(一)创建并定义新变量可以在数据步中,利用赋值语句创建或重新定义新变量(列),语法:变量名=表达式;注:(1)表达式可以是数值或字符常量、数学表达式、函数等;(2)加减乘除幂:+ - * / **,也可以使用括号。
例1下面数据(C:\MyRawData\Garden.dat)是番茄、南瓜、豌豆、葡萄的重量:代码:data homegarden;infile'c:\MyRawData\Garden.dat';input Name $ 1-7 Tomato Zucchini Peas Grapes;Zone = 14;Type = 'home';Zucchini = Zucchini * 10;Total = Tomato + Zucchini + Peas + Grapes;PerTom = (Tomato / Total) * 100;run;proc print data = homegarden;title'Home Gardening Survey';run;运行结果:程序说明:(1)5-8行使用了5个赋值语句,第6行改写旧变量,运行结果将输出所有变量;(2)若观测值中有缺省值,相应的新变量也出现缺省值。
(二)使用SAS函数一、SAS函数概述SAS自带数百个函数,主要包括以下函数类:字符/字符串函数日期/时间函数距离/州/邮编代码函数数学函数概率/描述统计/随机数函数金融函数宏函数变量信息函数函数基本调用形式(可以嵌套调用):函数名(参数1,参数2,…);例2南瓜雕刻比赛的数据(C:\MyRawData\pumpkin.dat)包含了参赛者的名字、年龄、雕刻的南瓜类型、报名日期、五位裁判给出的分数:代码:data contest;infile'c:\MyRawData\Pumpkin.dat';input Name $16. Age 3. +1 Type $1. +1 Date MMDDYY10.(Scr1 Scr2 Scr3 Scr4 Scr5) (4.1);AvgScore = mean(Scr1, Scr2, Scr3, Scr4, Scr5);DayEntered = day(Date);Type = upcase(Type); /* 转化为大写 */run;proc print data = contest;title'Pumpkin Carving Contest';run;运行结果:程序说明:(1)均值函数mean( )返回非缺省值参数的平均值;(2)d ay( )函数返回日期值距离1961年1月1日的天数。
第六章 SAS过程中常用语句要对数据进行分析和处理,需在过程中使用一些过程步语句和有关的选择项。
本章介绍SAS过程步中通用语句,对有些过程步的专用语句和选择项将在后面各过程中介绍。
第一节 PROC语句语句格式:PROC <SAS过程名> [选择项];功能:指定所需调用的过程以及该过程的若干选择项。
PROC语句中有三种类型的选择项用于各过程步:(1)关键字规定反映本过程特征的关键字。
(2)关键字=值规定初值,该值可是数字或字符串。
(3)关键字=SAS数据集规定输入或输出的数据集。
最常用的是DATA一数据集,指出本过程所要处理的数据集名,如缺省则处理最新建立的数据集。
例PRINT过程,打印数据集AA的内容。
PROC PRINT DATA=A;第二节 BY 语句语句格式:BY [DESCENDING] 变量… [NOTSORTED];功能:以指定的变量值来分组处理某数据集。
BY语句总是首先与S0RT(分类)过程一起使用,以便定义数据排列次序。
当BY语句在其它大多数对SAS数据集作分析的过程中使用时,能分别处理每一个分组(BY)的观测值。
这里的变量是数据集中的用作分组的变量,以这个变量按指定要求排序(分类)。
选择项DESCENDING要求紧接的变量按降序排列数据集中各观测值,NOTSORTED要求进行分组时,各组不需按字母或数字顺序排序。
例如:BY DESCENDING AGE;本语句按变量AGE(年龄)值对数据集进行降序排序。
假设有一数据集CLASS包含有变量DAY的观测值,DAY值是一周内某天的三个字符缩写形式(如,MON,TUE…)将数据集中具有相同DAY 值的观测值分为一组,DAY的值是按日历顺序而不是字母顺序排列的。
下面的语句可以和一个PROC语句一起使用,按DAY分组处理数据集。
BY DAY NOTSORTED;(不排序,但按指定变量值将同类放一起)如DESCENDING和NOTSORTED都没指定,那么数据集中的观测值一定会按BY变量值的升序安排。
例下面程序对AA数据集按SEX变量值升序排列,并在同一SEX组内对AGE值进行降序排列,并按SEX变量分组打印。
PROC SORT DATA=AA; (yp52.sas)BY SEX DESCENDING AGE;PROC PRINT;BY SEX;第三节 CLASS 语句语句格式:CLASS 变量表;功能:定义分类变量。
分类变量只有少数的几个离散值或者不连续值,可以是字符型或数值型。
在CLASS语句中,按指定变量的值进行分组。
CLASS语句对计算统计的作用类似于BY语句。
它们之间的不同是打印输出的格式,并且BY语句要求先排序。
第四节 VAR 语句语句格式:VAR 变量表;功能:用于定义分析变量。
语句中变量为要作分析的数据集中的变量,任何有效的变量清单形式均可被使用。
当该语句省略时,对所有变量做统计计算。
例下面语句按SEX值的分组对VAR所标识的H变量进行分析产生两个单独的描述性统计报告。
PROC MEANS DATA=AA;BY SEX;VAR H;第五节 WEIGHT 语句语句格式:WEIGHT 变量;功能:在过程中规定一个数值变量,并以它的值作为观测值的权重。
例:假设一个数据集包括了变量GROP(X,Y两组)、SEX(F为女,M 为男)和HRSWORK。
下面程序产生一个表格,显示各组不同性别人所工作的时间数等等。
DATA GSH; (yp53.sas)INPUT GROP $ SEX $ HRSWORK;CARDS;X F 5.8Y F 6.4X M 7.2Y M 7.0;PROC FREQ;TABLES GROP*SEX;WEIGHT HRSWORK;第六节 FREQ 语句语句格式:FREQ 变量;功能:规定一个数值变量,它的值表示工作数据集中观测值出现的频数。
假定某观测值的FREQ变量值为n,则在分析时,数据集中的该观测值被视作出现的频数为n。
当n<l时,观测值不加以计算;若n不是整数,则自动取整。
观测值数被认为等于FREQ变量的和。
例如:DATA A; (yp54.sas)INPUT SEX $ AGE NUMBER;CARDS;F 20 10F 22 23M 21 19M 22 16PROC MEANS;VAR AGE;这个结果是A数据集中4个观测值对AGE求的平均;如果对MEANS过程加入FREQ语句。
PROC MEANS;FREQ NUMBER;VAR AGE;该结果按10个20岁(女)、23个22岁(女)、19个21岁(男)、16个22岁(男),总计68个观测值对AGE求平均。
根据观测值的情况,利用FREQ语句可减少输入数据,加快计算。
第七节 ID 语句语句格式ID 变量表;功能:用来规定一个或几个变量,以便在输出或由该过程产生的SAS数据集中用这些变量值来识别观测值。
例如:PROC PRINT DATA=AA;ID NAME;输出结果的第一列打印出ID语句中规定的NAME值所取代的观察序号(OBS)。
第八节 FORMAT 语句语句格式:FORMAT 变量 [格式]…;功能:用于在过程中设置变量输出格式。
利用FORMAT语句使PROC步中的变量与输出格式联系起来。
格式可以是SAS的输出格式,或是已用PROC FORMAT自定义的格式。
可用一个FORMAT语句给几个变量以相同的格式或不同的格式。
当SAS系统打印变量值时,它用与其联系的格式来打印。
格式有两种表示方法:一种是格式名以小数点结束(如SEXFMT.),另一种是使用宽度值和小数位数之间有一个小数点的格式表示。
FORMAT语句的使用说明:(1)若一个变量在几个FORMAT语句中出现,则它使用最后一个FORMAT语句给定的格式。
例如在DATA步中用FORMAT语句对某些变量定义格式之后,在PROC步又使用了FORMAT语句对一些变量重新定义格式,则在此过程中定义的格式有效。
(2)如要取消在DATA步中已定义的输出格式,可在FORMAT语句中仅使用变量名而不使用输出格式。
下面举例说明FORMAT语句的使用:例1:在PRINT过程中用FORMAT语句对AA数据集中H,W变量规定输出格式为保留两位小数。
PROC PRINT DATA=AA;FORMAT H 6.2 W 5.2;如果你已使用FORMAT过程定义了一个格式,就需要用一个FORMAT 语句来使该格式与一个或多个变量发生联系。
例2:利用FORMAT语句将AA数据集中变量SEX用MALE、FEMALE表示。
PROC FORMAT; (yp55.sas)VALUE $ SEXFMT ‘1’='MALE'‘2’='FEMALE';PROC PRINT DATA=AA;FORMAT SEX $SEXFMT.;在程序中用FORMAT过程定义了SEXFMT.格式,在PRINT过程中用FORMAT语句将数据集AA中的变量SEX与输出格式SEXFMT.联系起来,当SEX的值被打印时,变量SEX的值1和2被MALE和FEMALE取代。
遇有日期时间值,为了以可理解的形式打印这些值,必须用FORMAT语句为这一变量赋以相应的日期、时间输出格式,否则将会被打印成自1960年1月1日以来的天数或自零点以来的秒数。
例如:DATA EMPLO;INPUT NAME BEGING DATE7.;FORMAT BEGING DDMMYY8.;CARDS;ZHONGLI 15JAN84LIUWEl 03MAR85;PROC PRINT;第九节 LABEL 语句语句格式:LABEL 变量='标记' …;功能:给变量赋以标记,以便把变量名的含义更明确地在输出中表示出来。
在DATA步中可以用LABEL语句,PROC步中也可用LABEL语句给变量指定标记。
当在一个PROC步中用LABEL语句时,仅在该过程步期间该标记与该变量相联系。
这一点与DATA步中的LABEL语句的作用不同。
例:绘制一个表示H与W变量关系的散点图,H、W用相应标记代换。
PROC PLOT DATA=AA; (yp57.sas)PLOT H*W='*';LABEL H='HEIGHT'W='WEIGHT';第十节 OUTPUT 语句语句格式:OUTPUT OUT=数据集名[统计关键字=变量名];功能:将过程结果输出到一个新的SAS数据集。
如果想建立一个永久性SAS数据集,必须指定一个二级名。
统计关键字指明在新的数据集中想要的统计项,且给包含这些统计项的变量起名字。
这些名字将作为统计值在新数据集中。
输出数据集可做为下步处理的输入。
例:对AA数据集中变量H、W计算统计量N、MEAN、SUM,并产生输出数据集PPP。
PROC MEANS DATA=AA N MEAN SUM; (yp58.sas)VAR H W;OUTPUT OUT=PPP mean=mh mw std=sh;PROC PRINT DATA=PPP;MH和MW分别是H和W的均值,SH是H的标准差,W的标准差没有指定。
第十一节 TITLE 语句语句格式:TITLE[n] ['标题内容'];功能:规定打印到SAS输出文件上的标题。
规定最多十个标题行。
n紧跟在TITLE后,不留空格,用来规定标题所在行。
n的范围从1到10,如未指定,缺省值是1。
例如:TITLE3 'THIS IS THE THIRD TITLE LINE';为输出页的第3行规定了一个标题。
标题内容为想要打印的具体标题,字符数不超过132个。
如果所规定的标题比当前规定的行长,则该标题被分成多行。
标题要括在引号内。
一旦为一行规定了一个标题,那么在后继的输出中都使用该标题,直至取消这一标题或为该行定义其它的标题为止。
如想取消所有现存的标题,使用下面语句:TITLE;如想取消第n行和它后面行的标题,使用:TITLEn;如果需给某个PROC步的输出加上标题,遵照标题设置的规定,语句放在:(1)前一步的RUN语句之后。
(2)在PROC语句之后和在下一个DATA、PROC或RUN语句之前的任何地方。
例1: PROC PRINT;TITTLE 'TITLE FOR FIRST PROC';PROC MEANS;则为PRINT和MEANS两过程的输出打印标题。
例2 PROC PRINT DATA=AA;RUN;TITLE 'TITLE FOR SECOND PROC';PROC MEANS;因TITLE语句在前一步(PRINT过程步)的RUN语句之后,所以只在MEANS步输出中打印标题。