




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 第三章 sas过程步 sas系统用sas数据步生成和管理数据, 用过程步实现分析、报表、绘图等功能。 本章介绍sas过程步的一般用法和常用语句的含义,以及几个简单报表、分析、绘图过程的使用。3.1 sas 过程初步sas过程步的一般形式为:proc 过程名 data=输入数据集 选项; 过程语句 / 选项; 过程语句 / 选项; run; n proc语句的选项是可选的,用来规定过程运行的一些设置,如果有多个选项用空格分开;n data=输入数据集是可选的,如果缺省的话使用最近生成的数据集;n 过程步一般以run 语句结束,可以省略run语句而在下一个过程步或数据步的开始处结束。n 交互式过
2、程:在遇到run语句时不结束过程运行,只有遇到quit语句或者下一个过程步、数据步时才结束。n 过程步在proc语句之后、结束之前可以有若干个过程语句;n 过程语句与数据步中的语句不同,数据步中的语句不能用在过程步中;n 过程步语句一般以某一个关键字开头,比如var、by、tables、weight等,语句中有一些说明,如果有选择项的话要写在斜杠后。 有些sas过程步是对数据集作某种变换(比如sort过程对数据集排序),不生成显示结果; 多数过程步是对数据集作某些分析、报表,这时结果出现在output窗口(高精度绘图过程的输出在graphics窗口); 对output窗口的结果,可以用“fil
3、e | save as”菜单保存为一个文本文件,可以进一步的修饰,插入到其它报告中,也可以用“file | print ”菜单打印。sas过程步常用语句一、一、varvar语句语句 var语句在很多过程中用来指定分析变量。在var后面给出变量列表: var 变量名1 变量名2 变量名n; 变量名列表可以使用省略的形式,如x1-x3,math-chinese等。 var用法例如: var math chinese; 二、二、modelmodel语句语句 model语句在一些统计建模过程中用来指定模型的形式。其一般形式为 model 因变量 自变量表 / 选项; 例例3-13-1 datadata
4、 a2;input x y;cards;820 165 780 158 720 130 867 180 690 134 787 167 934 186 679 145 639 120 820 158;procproc regreg;model y=x;runrun; 三、三、by语句和语句和class语句语句 by语句在过程中一般用来指定一个或几个分组变量,根据这些分组变量值把观测分组,然后对每一组观测分别进行本过程指定的分析。 在使用带有by语句的过程步之前一般先用sort过程对数据集排序。 例例3-2: data class; set sasuser.class; run; proc so
5、rt; by sex; run; proc print data=class; by sex; run; 上述print 过程可以把男、女生分别列出。在一些过程(如方差分析)中,使用class语句指定一个或几个分类变量,它实际相当于因变量;在另一些过程(如means)中,class语句作用与by语句类似,可以指定分类变量,把观测按分类变量分类后分别进行分析;使用class时不需要先按分类变量排序。四、四、output语句语句 在过程步中经常用output语句指定输出结果存放的数据集; 不同过程中把输出结果存入数据集的方法各有不同, output语句是用得最多的一种,其一般格式为: output
6、 out输出数据集名 关键字变量名 关键字变量名 ; 其中用out给出了要生成的结果数据集的名字,用“关键字变量名”的方式指定了输出哪些结果(关键字的例子比如means过程中的mean,var,std等等),等号后面的变量名指定了这些结果在输出数据集中叫什么名字。例例3-3title 95级1班学生成绩排名;data c9501; input name $ 1-10 sex $ math chinese; avg = math*0.5 + chinese/120*100*0.5; cards;李明 男 92 98张红艺 女 89 106王思明 男 86 90张聪 男 98 109刘颍 女 80
7、 110;run;proc print;run;proc sort data=c9501; by descending avg;run;proc print;run;proc means data=c9501; var math; output out=result n=n mean=meanmath var=varmath; run; proc print data=result; run; 五、五、freqfreq语句语句 freq语句指定一个重复数变量,每个观测中此变量的值说明这个观测实际代表多少个完全相同的重复观测。freq变量只取整数值。如 freq numcell;例例 3-43-
8、4 data a;input sex$ age number;cards;f 20 20 f 22 23m 21 19 m 22 16;proc means;freq number;var age;run; 六、六、weight语句语句 weight语句指定一个权重变量,在某些允许加权的过程中代表权重,其值与观测对应的方差的倒数成比例。七、七、id语句语句 有些过程(如print、univariate)需要输出观测的代号,这一般使用观测的序号。但是,如果数据集中有一个变量可以用来区分观测(如人名、省市名),就可以用id语句指定这个变量作为观测标识,如: id name; 指定用变量name的值
9、来标识观测。八、八、wherewhere语句语句 用where语句可以选择输入数据集的一个行子集来进行分析,在where关键字后指定一个条件。 例例3-53-5: where math=60 and chinese=60; 指定只分析数学、语文成绩都及格的学生。九、九、labellabel语句和语句和formatformat语句语句 label语句为变量指定一个标签,很多过程可以使用这样的标签。其格式为 label 变量名标签 变量名标签 ; 例例3-63-6 proc print data=sasuser.c9501 label; id name; var math chinese; lab
10、el name=姓名 math=数学成绩 chinese=语文成绩; run; format语句可以为变量输出规定一个输出格式. 例例3-73-7 proc print data=sasuser.c9501; format math 5.1 chinese 5.1; run; 使得列出的数学、语文成绩宽度占5位,带一位小数。在数据步中规定的变量属性是附属于数据集本身的,是永久的;在过程步中规定的变量属性(标签、输出格式等)只用于此过程的本次运行。 3.2 3.2 列表报告列表报告print过程用来生成列表报告; 基本用法基本用法 proc print;print过程步用来列出数据集的内容,可以
11、检查变量与值之间对应是否正确,数据输入是否正确。为了列出一个指定的数据集,在proc语句中使用data选项指定要列表的输入数据集名, 例例3-83-8 proc print data=sasuser.gpa; run;在过程步内使用var语句可以指定要列出的变量并指定顺序。例例3-9 proc print data=c9501; var name chinese sex; run; 列出变量name、chinese、sex的值。注意这已不是生成时的变量顺序,并且变量math未列出。注意print的输出第一列总是标为obs,值为观测序号。在proc print语句中加入noobs选项,结果中就没
12、有了obs这一列 例例3-10 proc print data=c9501 noobs; run; 在过程中使用where语句可以从输入数据集中选一个子集来处理,在print过程中使用where 可以指定只列出满足条件的观测。 例例3-11 proc print data=c9501; where name in (李明, 张聪); run; 使用中文列标题使用中文列标题 为了对列标题使用中文,可以在过程内用label语句给变量指定标签,同时在proc print语句中加label选项,例例3-12 proc print data=c9501 noobs label; var name sex
13、 math chinese avg; label name=姓名 sex=性别 math=数学 chinese=语文 avg=平均分; run; 实际上,如果在生成数据集的数据步中使用如上的label语句,结果数据集中的变量就有了标签,在过程步中可以直接使用而不需再次用label语句定义。例例3-13 title 95级1班学生成绩排名;data c9501; input name $ 1-10 sex $ math chinese; avg = math*0.5 + chinese/120*100*0.5;label name=姓名 sex=性别 math=数学 chinese=语文 avg
14、=平均分; cards;李明 男 92 98张红艺 女 89 106王思明 男 86 90张聪 男 98 109刘颍 女 80 110;run;proc print data=c9501 label;run;proc sort data=c9501; by descending avg;run;proc print data=c9501 label;run;用用by语句分组处理语句分组处理 在过程步中使用by语句可以指定分类变量,把观测分类处理在使用带有by语句的过程之前一般用sort过程对数据集按照分类变量排序。例例3-14: proc sort data=c9501; by sex; ru
15、n; proc print data=c9501; by sex; run; 。 在print过程中可以用sum语句计算某个变量的总计(总和)。例例3-15 9501班的同学购买课外书所用的钱数用如下程序输入数据集: data bkmoney; input name $ amount; cards; 李明 20 张红艺 15 王思明 10 张聪 20 刘颍 50; run; 计算总计和小计 只要在print过程中加上sum语句,可以对指定要求和的变量求和:例例3-163-16 proc print data=bkmoney noobs; sum amount; run; 列出了此数据集并计算全
16、班的总书款, sum语句中可以指定多个变量名,同时对这些变量求和。 用by语句与sum语句就可以既计算总和也计算分组小计。 例例3-163-16续续 除了要计算学生购买课外书总支出外还想分男、女生计算总支出。 注意由于数据集bkmoney 中没有性别的信息,首先用了带merge语句的数据步来横向合并c9501和bkmoney两个数据集。 proc sort data=c9501; by name; proc sort data=bkmoney; by name; data new; merge c9501 bkmoney; by name; run; proc sort data=new; b
17、y sex; proc print data=new; by sex; sum amount; run; 3.3 3.3 汇总表格汇总表格 tabulate过程可以作出很复杂的表;一般格式为: proc tabulate data=数据集名; class 分类变量; var 分析变量; table 页维说明,行维说明,列维说明 / 选项; run; class语句给出分类变量,用分类变量可以给观测分类,计算统计量时可以对每一类分别计算。var语句给出分析变量,分析变量必须是数值型变量,要计算的统计量是对这些变量计算。例3-17 proc tabulate data=new; class sex
18、; var amount; table sex, amount; run; 可以用“分析变量名*统计量名” 的形式。 统计量名包括n、nmiss、mean、std、min、max、range、sum、uss、css、stderr、cv 、t(检验均值为0的t统计量值)、prt(t统计量的p值)、var、sumwgt(权数变量的和)、pctn (某类观测占总观测个数的百分比)、pctsum(某类观测的总和占全部总和的百分比)。例3-18 求男、女生的数学、语文成绩平均值及标准差: proc tabulate data= new; class sex; var math chinese; tabl
19、e sex, (math chinese)*(mean std); run; 要并列变量或并列统计量的话只要把各项用空格连接,如math chinese和mean std。变量和统计量名之间用星号连接。如果要计算总的统计量值,只要加一个all关键字。 例3-18续 table语句改成: table sex all, (math chinese)*(mean std); 可以用星号连接分类变量和分类变量以构成交叉分组,用星号连接分类变量和分析变量以构成分类计算分析变量的统计量。例例3-183-18续续 要考察性别的频数分布,使用统计量n和pctn,table语句可以写成 table (sex a
20、ll)*(n pctn); 如果要计算的统计量不是n、pctn这样的基于计数统计量,则还需要指定用来计算统计量的分析变量, 例如table语句写成 table (sex all)*math*(mean std); 在这两个例子中没有行维,只有列维。使用keylabel语句可以指定各统计量的标签,其格式为 keylabel 关键字标签; 例例3-19 3-19 proc tabulate data=new; class sex; var math chinese; table (sex all), (math chinese)*(mean std); keylabel mean=平均值 std=
21、标准差 all=总计; label sex=性别 math=数学 chinese=语文; run; 用keylabel指定了mean和std标签,又用label语句指定了变量的标签: 3.4 数据排序数据排序sort过程可以把数据集按某一个或若干个变量的次序进行排序。 例例3-203-20 proc sort data=c9501; by sex; run; 把数据集c9501 的观测按性别排序(分类)。 注意data=指定的数据集既是输入数据集又是输出数据集。过程的结果在输出窗口没有显示。可以按几个变量排序, 例例3-203-20 proc sort data=c9501; by sex d
22、escending avg; run; 上面程序按男、女性别排序,并在男生、女生内部按平均分由高到低排序。 by语句内在一个变量名前面加上descending关键字表示此变量的排序是由大到小的。 结果可以用proc print;run;显示出来。 在insight中也可以对数据集排序(使用数据窗口菜单的sort功能)。3.5 3.5 数据集转置数据集转置可以利用可以利用transpose过程改变行和列的关系过程改变行和列的关系例例3-21data mat; input x1 x2 x3;cards;1 2 34 5 67 8 910 11 12;run;proc print;run;proc
23、transpose data=mat out=matt;var x1 x2 x3;run;proc print; run;3.6 描述统计means过程、univariate过程、freq过程 这三个过程用来计算简单的数据汇总信息。means和univariate过程对区间变量计算均值、标准差等数字特征,freq过程对离散变量计算取值频数分布。例例3-21 3-21 proc means data=c9501; var math chinese; run; 上述程序对c9501中的数学成绩、语文成绩计算简单统计量。如果使用univariate过程则可以计算较多的统计量。例例3-22 proc
24、univariate data=sasuser.gpa; var gpa; run; 结果中各统计量的可参见李东风统计软件教程1.3.7 freq过程可以考察离散变量的取值分布,在tables语句中指定要分析的变量。 例例3-233-23 proc freq data=c9501; tables sex; run; 对区间变量使用freq过程列出频数分布, 如 tables math; means、univariate、freq的结果可以在insight的“analyze|distribution”和“tables|frequency table”得到。例例3-243-24 data sasu
25、ser.taxif; input amount num ;cards;10 4 12 6 13 1 15 116 1 19 5 20 3 23 124 1 25 1 26 3 27 1;run;proc means data=sasuser.taxif mean std sum min max;var amount ;freq num;run;proc print;3.7 用用corrcorr过程计算相关系数过程计算相关系数相关系数可以反映变量两两之间的线性相关;可用proc corr 。 例例3-253-25 proc corr data=sasuser.gpa; var hsm hss h
26、se; run; 上述程序计算sasuser.gpa中的三个变量hsm、hss、hse两两之间的相关系数(普通的pearson相关系数)。corr的结果也在insight中可以由“analyze|multivariate”菜单得到。3.8 用sas/graph绘图sas可以把存贮在sas数据集中的数据以图形的方式形象直观地显示出来;在sas/graph 模块的支持下,sas可以作散点图、曲线图、直方图、扇面图、三维曲面图、等高线图、地图,等等。散点图和曲线图散点图和曲线图 用gplot过程绘制散点图和曲线图。 例例3-263-26 proc gplot data=sasuser.gpa; sy
27、mbol i=none v=star; plot satv*satm; run; 结果显示了一个graphics窗口,绘出了以satv为纵轴、以satm为横轴的散点图在gplot过程中,用plot语句指定绘图用的变量; 要绘制连线,则在symbol语句中指定i=join如果不想出现散点符号,则在symbol语句中指定v=none。symbol语句是一个全程语句,指定绘图用的连线方式、颜色、散点符号、大小,等等。symbol语句可以带编号,如symbol2,symbol3 等,不带编号的相当于symbol1。v=规定数据点的图形符号h=规定图形符号的高度i=规定两点之间的插值方法font=规定字
28、体l=规定点之间插值线的类型color=规定图形线的颜色在plot语句中指定多个因变量(自变量一般应为同一个)并使用overlay选项可以做多条曲线;例例3-273-27 proc gplot data=sasuser.air; symbol1 i=join v=none line=1 ; symbol2 i=join v=none line=2 ; plot co*datetime=1 so2*datetime=2 / overlay; run; 说明:其中指定了两个symbol语句,第一个symbol语句指定了line=1,表示线型为实线,第二个symbol语句指定了line=2表示线型为
29、虚线。我们在plot语句中用了“纵轴*横轴= n”的格式来指定曲线使用哪一个symbol语句的规定来画, n对应于symbol语句的序号。symbol语句中,i=选项, 取i=sm nn( nn取0099值)表示绘制样条曲线但可以不经过散点, nn值代表曲线光滑性与拟和度的折中, 取i=needle绘制每个点到横轴的垂线, 取i=rl 绘制线性回归直线, i=rq为二次曲线, i=rc为三次曲线。后面加上cli nn如rlcli95表示在回归直线之外绘制预测值的95置信限曲线,例例3-28 3-28 proc gplot data=sasuser.gpa; symbol i=rlcli95 v
30、=star; plot satv*satm; run; gplot过程还可以有其它灵活的用法,可以参考有关资料或用sas系统菜单“help”,从中找“sas system help: main menu | graphics | gplot”。 直方图和扇形图 可用gchart过程绘制直方图;例例3-293-29 proc gchart data=sasuser.gpa; vbar gpa; run; sasuser.gpa中gpa的分布直方图, 其中绘图用的变量用vbar语句给出。 把vbar改成hbar则条形方向变为横向。 用gchart绘制的直方图和在insight中绘制的直方图有所不同
31、,它在横轴标的是区间的中点值,而在insight中横轴标的是区间的端点值。 可以绘制分组的直方图, 例例3-30 3-30 proc gchart data=sasuser.gpa; vbar gpa / group=sex; run; 在gchart中用pie语句绘制表示频数的扇形图:例例3-313-31 proc gchart data=sasuser.gpa; pie sex;run; 若需要显示百分比值,在pie语句中加入type=percent选项,例例3-323-32“pie sex / type=percent;” gchart过程还可以用block语句绘制三维直方图。例例3-3
32、2 3-32 goptions hpos=90 vpos=70; proc gchart data=sasuser.houses; block style / group=bedrooms; run; 三维曲面图和等高线图对一个二元函数z=f(x,y),有了x取等间隔值、y取等间隔值时z的值,这时我们可以用g3d过程绘制曲面图形,用gcontour绘制曲面的等高线图。例例3-33 3-33 绘制一个二维正态分布曲面的图形。假设(x,y)服从联合正态分布,其均值都是0,方差分别为1和a,相关系数为r。这时,我们可以得到(x, y)的联合密度函数的公式为:可以在一个网格上计算曲面的值: data
33、dnorm2; a=2; a2=sqrt(a); r=0.5; det=a*(1-r*r);do x=-3 to 3 by 0.3; do y=-3*a2 to 3*a2 by 0.3*a2; z=1/(2*3.1415926*det)*exp(-0.5/det*(a*x*x + y*y - 2*r*a2*x*y); output; end; end; keep x y z; run; g3d过程来绘制曲面图: proc g3d data=dnorm2; plot x*y=z; run; 用gcontour过程可以绘制曲面对应的等高线图, 例例3-33 3-33 proc gcontour data=dnorm2; plot x*y=z; run
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年龙里县人民医院(医共体)总院招聘工作人员考试真题
- 无害化垃圾填埋场工程项目可行性研究报告
- 2025年度商铺租赁合同副本及年度维护协议
- 2025年度大棚种植与农业品牌建设合作协议
- 2025年度销售保密协议:适用于跨境电商平台数据安全
- 2025年度口腔护理专业人才聘用与管理协议
- 中途退场合同范本
- 2025年中国心绞痛治疗仪市场运行态势及行业发展前景预测报告
- 2025年度个人与村委会签订土地复垦利用合作协议
- 教育机构装修安全责任条款
- 高中课程表模板1
- tlc-jc dy001通信用高频开关电源系统检验报告模板va
- 阀门噪声计算程序(IEC)(带公式)
- 2022年RDA5807m+IIC收音机51单片机C程序上课讲义
- 雅马哈贴片机_修机_调机的经验之谈1
- 全自动咖啡机基本结构及原理教程课件
- 金属风管支架重量计算表
- 正负零以下基础施工方案(44页)
- 简爱人物形象分析(课堂PPT)
- 义务教育《劳动》课程标准(2022年版)
- 从业务骨干到管理者(课堂PPT)
评论
0/150
提交评论