软件教程sas语言与数据管理_第1页
软件教程sas语言与数据管理_第2页
软件教程sas语言与数据管理_第3页
软件教程sas语言与数据管理_第4页
软件教程sas语言与数据管理_第5页
已阅读5页,还剩10页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2SASSASSAS语言。SASFoxPro,数。SASSAS语言程序来调用,FoxPro等一样是一种第四代语言。SAS语言的基本成分与规则,SAS语言如何用来管理数据,SAS语言作为一SAS过程使用的初步知识。§2.1SASSASSAS语言程序由数据步和过程步组成。数据步用来生成数据集、计算、整理数据,过程步用来对数据进行分析、报告。SASSAS语句一般由一个关键SASSAS语句开头的特殊单词,SAS语句除了赋值、累加、注释、空语句以等等。SAS18个字母、数字、下划线组成,第一个字符必须是字母或下划线。SASSAS名字都不分大SASSAS数据步程序中的计算用表达式完成。表达式把常量、变量、函数调用用运算符、括号SAS常量主要有数值型、字符型两种,并且还提供了用于表达日期、时间的数据类型。例ll字符型:'Beijing',"LiMing",""l日期型:'13JUL1998'dllSAS是一种数据处理语言,而实际数据中经常会遇到缺失值,比如没有观测到数值,被人不肯回答,等等。SAS中用一个单独的小数点来表示缺失值常量。SAS变量的基本类型有两种:数值型和字符型。日期、时间等变量存为数值型。SAS的数集中的存贮一般使用8SAS的字符型变量缺省的长度是8INPUT 变量名 长度 算术运算符为+ =^><EQ等名字和=等特殊字符是同一运算符的等价写法。比较运算符得到"真"或"假"的结provin('Beijing','Tianjin','Shanghai',

??

这种SELECTWHEN(逻辑表达式,WHENOTHERWISE后的

注意上例中第二个WHEN语句的条件等价于age>12andage<35,因为如果小于等12WHENSELECT结构,根本不会判断第二个条IF-ELSEIF-ELSE结构的用法是一致的。SASDO循环和当型、直到型循环。DO循环的写法是: 计数变量=起始值TO 结束值BY 步长"可以省略,这时步长为1。如果步长取负值,则继续循环的条件是计数变量大于等于 i= BYj= LEAVECbreak语句。例如在上1000时停止循环: 在循环体内用CONTINUE语句可以立即结束本轮循环并转入下一轮循环的判断与dox=0to3. y=sin(x);ify<0thenCONTINUE;z=cos(x); 00.01计算正弦值,如果正弦值为负则考虑下一个值,正弦值 (mod(x,i)^=ifi<xthenputx不是素数 mod(x,i)xi的余数。DOUNTIL循环退出条件dountilputn=;doi=3,7,11to17by3while(i**2<200);putij;循环结束。注意WHILE条件只作用逗号隔开的最后一项。SAS可以把一组同为数值型或同为字符型的变量合在一起,使用同一个名字称呼,用下标SAS数组每个元素都有自己的变量名。 数组名(维数说明)(初始值表 math (0,0,SAS名字且不能与同一数据步中的变量重名。对一维数组,维数说明的变量名,各变量名以空格分隔。比如,上例中tests(1)代表数学成绩,tests(2)代表语文成 yr95-yr97tests可以等价地说明为: math (0,0,可以用函数DIM(数组名) x11x12x21 数组名(维数说明)$( $ 一个独立的变量。SAS也提供了与其它程序设计语言相同的数组,即数组元素只由数组名和序号决定,没有对应的变量名。这种数组叫住?0INPUT语句从数据行中读入下一个观测,把变量X、Y赋值100200位置由运行时设置的一个数据指针指示然后计算变量Z的值得300。于是PUT语句输出的X、Y、Z值分别为 。然后,运行控制跳过CARDS语PUTINPUTWORK.APROCPRINT;RUN;就可以显示此数据集的内容如下: 12SAS数据步程序和普通程序的一个重大区别:SAS数据步如果有数据语句开始继续执校钡蕉寥?;数据语句(INPUT、SET、MERGE、UPDATE、MODIFY等)读入了数据结束标志为止才停止执行数据步,并把读入的各个观测写入在DATA语句中指定的数据集。如果没有数据_N_,它的值为数据步循环计数值。数据步流程见图1。12.3.2INPUTINPUTCARDS语句和一个只有一个分号的最简单的INUT$datainputname$ $math 男9298女8910686男98109女80110;些数据,INPUT语句中依次列出了四个变量名,并在字符型变量NAME和 lll字符型数据长度过8个字符,不允许完全是空白,中间不允许有空白,开头和结尾lINPUT语句中必须列出观测中的每一项数据对应的变量名而不能省略中间的某一个INPUT语句的列方式。这时,除了datainputname$1-10 $11-13math14-1618-20;男 女89男 男98女80;lll8l可以只输入数据行中的某些忽略其它项datainputyear7-8 mon9-10 day11-12;;格式输入,即在字符型变量名和$CHAR10.10个字符。有特殊格式的数据枰糜懈袷绞淙耄丛诒淞棵蠹痈袷矫F渲凶畛<氖怯美词淙肴掌凇J葜械娜掌谛捶ňJ嵌嘀侄嘌模热?998年10月9日可以写成"1998-10-9", 另外,日期数据在SAS中是按数值的,所以如果要显示日期值,也需要为它指定特殊的日期输出格式。例datainputdateyymmdd8.sales;formatdateyymmdd10.;56-6-;proc其期数据占据8列位置,如果不满8列要用空格补充,不能让后面的数据进入这8列。YYMMDD格式的六位数的日期(一位数的月、日前面补0),可以输入带世纪数的YYYYMMDD格式的日期(一位数的月134 datac9501a;set >100then KEEPDROPdatac9501b;setkeepnameavg;DROP语句指定要丢弃的变量,比如上例中的KEEP 90100分以上的学生的观测,可以用如下的"子集IF语句":datac9501c;setIFmath>=90and>=100;注意子集IFTHENSETOUTPUT集C9501中的所有男生的观测放到数据集C9501M中,把所有的观测放到C9501F中,datac9501mc9501f;setc9501; when('男outputc9501m;when('女')outputc9501f;otherwiseput='有错'; procprintdata=c9501m;run;procprintdata=c9501f;run;个结果数据集中呢?关键在于OUTPUT语句。OUTPUT语句是一个可执行语句,它命令把OUTPUT语句还可以用来强行写入数据集而不必象我们在数据步流程图中说明的那样等到OUTPUT语句后数据步流程中不再有自动写入观11010datadoi=1to10;procdatasetclass1class2class3class4;SETIN=变量名,变量名所给的C9501数据集按男、女拆集并恢复信息:datasetc9501m(in=malec9501f(in=female);ifmale=1then iffemale=1then 、包含学生的,数据集C9501V包含学生的数学成绩,数据集C9501W包含学生的、NEW:datanew;mergec9501uc9501vc9501w;C9501数据集横向拆分为包含、的数据集C9501X和包含、数学成绩、语文成绩的数据集C9501Y,然后datac9501x;setkeepname datac9501y;setkeepnamemath;procsortdata=c9501x;byname;procsortdata=c9501y;byname;datamergec9501xc9501y;byname;procPROCSORT是排序过程,用来把数据集按照某个变量的次序排序(NAMEBY语句指定排序的变量名用此数据集修改原数据集。使用如下的DATA步中可以实现数据集的更新:DATA新数据集名 原数据集更新用数据集; datainputname$ 男.王思明.;然后,把原数据集C9501和更新用数据集UPD均按(NAME)排序procsortdata=c9501;byname;procsortdata=upd;byname;红艺改成了男。dataupdatec9501upd;byname;procPROCSQL据集外,还提供了其它大型数据库管理系统(Oracle、Sybase)SQL语言功能。新表的内容,对表进行纵向合并、横向连接等等。SQL语言可以实现极其复杂的数据管理PROCSQLPROC 第一项,第二项,…,第n SELECT是一个语句,FROMWHERE叫做子句,注意语句是在最后结尾的,中间隔。FROM子句指定要从哪个数据集查询。WHERE子句指定选择观测的条件。所以,SELECT语句可以很方便地从一个表查procselectname,mathfromc9501 proc

899880SELECT语句中还可以加入ORDERBYselectname,mathfromc9501 orderbymathdesc;

988980SELECT2.3.7C9501Xprocsql;,mathfromc9501x,c9501y orderbymathdesc;SELECTSQL过程:title找出生日相同的人';dataclass;inputname$1-8birthyymmdd10.;formatbirthyymmdd10.;labelname='' 王思 ;procselectname,birthfromclassawherebirthinselectbirthfromclass^=orderbya.birth; SELECT语句前面加CREATETABLE表名AS:procselectname,birthfromclassaprocprintdata=bsamelabel;idname;bybirth;

procfreqdata=classnoprint;tablesbirth/out=bfreq;procsortdata=c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论