理学chaper2编程基础01

上传人:M****1 文档编号:577061210 上传时间:2024-08-21 格式:PPT 页数:65 大小:1.02MB
返回 下载 相关 举报
理学chaper2编程基础01_第1页
第1页 / 共65页
理学chaper2编程基础01_第2页
第2页 / 共65页
理学chaper2编程基础01_第3页
第3页 / 共65页
理学chaper2编程基础01_第4页
第4页 / 共65页
理学chaper2编程基础01_第5页
第5页 / 共65页
点击查看更多>>
资源描述

《理学chaper2编程基础01》由会员分享,可在线阅读,更多相关《理学chaper2编程基础01(65页珍藏版)》请在金锄头文库上搜索。

1、理学理学chaper2编程基编程基础础-01SAS语言组件语言组件 SAS 文件文件 由SAS创建、储存、管理的文件就是SAS文件。所有的SAS文件都保存在SAS逻辑库中。 最常用的SAS文件: l SAS数据集l SAS目录册 SAS文件系统文件系统SAS逻辑库由一组SAS文件组成。SAS软件系统的信息组织有两层,第一层是SAS逻辑库,第二层是SAS文件。 数据集:sas数据文件逻辑库 sas数据视图 sas目录册:图形,声音等文件补充:多个文件夹创建一个SAS逻辑库: Libname a (d:resbd,d:resfin); SAS外部文件外部文件 SAS不能直接识别的数据文件称为外部文

2、件。外部文件一般用于储存数据。外部文件一般用来储存:l 要读入SAS数据文件的原始数据l SAS程序语句l 过程步输出SAS语言元素语言元素SAS语言由语句、表达式、选项、格式、以及和其它编程语言名称类似的函数组成。SAS有两种语句l 数据步l 过程步数据集选项数据集选项数据集选项用在SAS数据集名称后的括号中,多个选项之间用空格隔开。括号中的数据集选项可以对数据集进行如下操作:l 重新命名变量;l 选择需要的观测;l 输出数据集中保留或删除的变量;l 数据集加密。语句格式:Data-set-name(Data-set-options)(option-1=value-1)例例2.4 数据集选项

3、举例。数据集选项举例。data scores(keep=team game1 game2 game3);/*scores中只保留team,game1game2 game3这4个变量)proc print data=new(drop=year); /*去掉变量year*/set old(rename=(date=Start_Date);/* 将date改名*/输入和输出格式输入和输出格式 输出格式输出格式format是SAS用来确定如何输出或写出数据值的指令,用FORMAT控制数据值在输出时所使用的格式。输入格式输入格式informat是SAS用来确定如何将数据读入变量的指令。如果在输入或输出数

4、据集的过程中没有设定变量的输入和输出格式,系统会自动使用原数据集中的这个变量原有的输入输出格式。语句格式:format. informat. 格式说明:$指定为字符格式,如果该项空缺,则默认是数值格式format规定有效SAS输出格式Informat规定有效SAS输入格式w设定输入输出的长度,一般来说是数据所占的列的数目d设定数值数据中小数点的位数函数函数SAS函数函数对数据参数进行计算处理并返回一个值。大多数函数所使用的参数是由用户提供的,一小部分函数使用系统提供的参数。 语句语句SAS语句就是一系列关键词、SAS名称、算符以及特殊字符的组合。所有的SAS语句以分号结尾。SAS语句一般分为数

5、据步语句与过程步语句,以及可以用在SAS程序任何地方的全局通用语句。KEYWORD parameteroptions;关键词关键词 参数 选项;其中:粗体-必须按显示形式书写的关键词;白正体-用户提供的信息;-括号内的信息可选;|-任选。参数PARAMETER不是任选项,不用括号,OPTIONS是选项关键词。例例2.5 有效的有效的SAS语句。语句。data data1; /* data为关键词,data1为SAS名 */data _null_; /* _null_为SAS名 */put name $ 8.; /* put为关键词,name为SAS名,$8.为输出格式*/format date

6、 yymmdd10.;proc means data=ResDat.class; /* proc为关键词,means为过程名 */infile “d:ResDatclass.txt”;do I=1 to 100;x=y+1; sumx+x;run;SAS系统选项系统选项 系统选项用来控制SAS的运行方式,如SAS系统启动,硬件软件的连接,SAS程序的运行等。 语句格式:OPTIONS option(s); option 设定一个或多个系统选项,任何系统选项都有一个默认设置。例例2.6 设定选项设定选项Libname ResDat d:ResDat; OPTIONS obs=5;/*取数据集前五

7、个观测*/Data one;Set ResDat.class;Run;表达式表达式 表达式由一系列操作符和操作对象构成,产生一个目标值。使用表达式可以对变量作变换和赋值,创建新变量,计算新数值以及控制条件语句的运行等。操作对象有:l 变量;l 常数。操作符包括:l 算术算符;l 比较算符;l 逻辑算符;l SAS函数;l 括号。SAS常数常数 SAS常数是SAS系统可以识别的一些固定值。数值常数数值常数 例例2.7 数值常数。数值常数。1, 5, 1.23, 1.2E23, 2E4 , 20000数值常数可以有多种格式展示。标准格式标准格式:1,01,+1,-1,1.1;科学计数法:科学计数法

8、:1.1e11, 1.2e-12;十六进制格式:十六进制格式:1cx,12x,9x例:例:Data aa;a1=9x+10;a2=12x+10;a3=1cx+10;run;proc print;run;字符常数字符常数 例例2.8 引用带引号的字符常数。引用带引号的字符常数。name=TOM”S;name=”TOMS”; /*例中,两语句等价。*/要注意的是,字符常数是由引号括起来的,但是字符变量的名称则没有引号,也就是说字符常数不能作为字符变量的名称。日期时间常数日期时间常数 例例2.9 引用日期时间常数。引用日期时间常数。1jan2000d; 01jan00d;9:25t; 18jan00

9、:9:27:25dtif begin=01JAN2000d then end=31DEC2000d; SAS算符算符SAS算符是一些符号,其作用是进行计算、比较等。算术算符算术算符 例例2.10 算术算符应用。算术算符应用。data;X=3.5*2.5; put X=;Y=9+1/3;put Y=;X=.;Y=1+X;put Y=; /*Y也是缺失值*/run;输出结果:X=22.917651494Y=9.3333333333Y=.比较算符比较算符 例例2.11 比较算符应用。比较算符应用。if xy then c5;else c12;比较算符经常出现在IF语句里。比较准则:l 数值和字符都可

10、以比;l 结果为真赋值1,假赋值0;l 字符值从左到右逐个按ASCII码排列序列进行比较;l 缺失值参加比较时,它比任何有效值都小。逻辑算符逻辑算符 算符等价形式含义AND与| OR或 NOT非其它算符其它算符 :连连接接字字符符算算符符“|”例例2.12 连接多个变量和常数。连接多个变量和常数。libname resdat d:resdat;data;set ResDat.lstkinfo;result=%a(|stkcd| ,| lstknm | ); put result;run;data;X=GOOD ;Y=MORNING;Z=X|Y;put Z=;run;SAS数据步的运行机制例:d

11、ata a; put x= y= z=; input x y; z=x+y; put x= y= z=; cards; 10 20 100 200; run; 这个程序的运行流程是这样的: (1) DATA语句标志了数据步开始,并指定了数据步结束时要生成的数据集名字为A(实际是WORK.A)。 (2)第一个PUT语句要输出变量X、Y、Z的值但它们还都没定义,所以LOG窗口的结果显示为三个缺失值。 (3)下面是INPUT语句,它从CARDS语句后面的数据行中读取变量X的值10,变量Y的值20。 (4)下一个赋值语句计算变量Z的值得到30。因此,LOG 中的第二行输出显示三个变量的值分别为10、2

12、0、30。 (5)从CARDS语句开始到空分号行的各行是非执行的,程序运行到RUN语句,发现这是本数据步的最后一个语句,按一般的程序语言的规则,程序到这里就应该结束了,但是,SAS是一个专用数据处理语言,如果按一般语言的规则,程序中的第二行数据(100 200)就不能被读入。所以,这个程序运行到RUN语句后,把读入的观测(这是第一号观测)写入输出数据集, (6)又返回到DATA语句后的第一个可执行语句开始执行,并先把所有的变量置初值为缺失值。于是,第一个PUT语句的结果显示三个变量均为缺失值,而不是上一步的10、20、30。 (7)下一个INPUT语句从数据行中读入下一个观测,把变量X 、Y赋

13、值100、200。读取位置由运行时设置的一个数据指针指示。然后计算变量Z的值得300。于是PUT语句输出的X、Y、Z值分别为100、200、300 (8)运行控制跳过CARDS语句到空语句,到数据步结尾,把第二号观测输出到数据集, (9)再返回到数据步开头,把变量值赋初值为缺失值,所以第一个PUT语句输出的三个变量值为缺失值。 (10)运行到INPUT语句,应该读入下一个观测,但是查询数据指针发现已经读完了所有数据,所以本数据步结束,并把两个观测写入数据集WORK.A中。 提交PROC PRINT;RUN;就可以显示此数据集的内容注意:SAS数据步如果有数据输入,比如用INPUT、SET、ME

14、RGE、UPDATE、MODIFY等语句读入数据,则数据步中隐含了一个循环,即数据步程序执行到最后一个语句后,会返回到数据步内的第一个可执行语句开始继续执行,直到读入数据语句(INPUT、SET、MERGE、UPDATE、MODIFY等)读入了数据结束标志为止才停止执行数据步,并把读入的各个观测写入在DATA语句中指定的数据集。如果没有数据输入而只是直接计算,则数据步程序不需要此隐含循环。数据步因为有这样一个隐含循环,所以也提供了用来查询某一步是第几次循环的特殊变量 _N_,它的值为数据步循环计数值。DATA语句语句1、data语句后无数据集名字,则自动生成 data1, data2等为数据集

15、名字;2、data _null_;不产生实际的数据集,只是把内容暂存 于内存,以供put语句等读取结果,可以节约计算 机资源3、data _last_;以最近产生的数据集命名并取代其内容。创建变量创建变量使用赋值语句使用赋值语句 Data a; x=1; run;/*数据集a中有个变量x,值为1*/使用使用INPUT语句语句 Data b; Input x $; Datalines; Aaa ; Run;关于关于input语句语句分组格式: input (g1-g5) (3*7.2 , 2*5.2); input (a b) ( $5.) input (a b) ($ , 5.)无需分行而按变

16、量连贯读数据固定该数据行;用于需要多个input语句同时读取一行数据。input例,Input例关于关于input语句语句data; input x ; cards; 1 2 3 4 ; run; proc print; run; 关于关于input语句语句data ; input type $ ; if type=c then input course $ prof $; else if type=s then input name $ id 3.2; cards; c math zxs s zhao 58888 ; proc print; run;关于关于input语句语句利用n +n #

17、n 进行指针控制关于关于input语句语句例:input1data; input 1 x 5.2 6 y 2.1 +2 z #2 xx; cards;12345678912345234;proc print;run;关于关于input语句语句几个特殊符号的用法(: & ): 读值时第一次遇到分隔符、或是数据行末尾、或是读满列数而结束 字符型输入值可以嵌有一个或几个空格 字符型输入值保留引号(与infile 语句中选项dsd一起使用才有效)Input2例关于关于input语句语句 例Input2 data topics9; infile datalines dsd; input speaker

18、:$15. title $40. location & $10.; datalines; Whitfield,Looking at Lift,Blue Room Puentes,Life After the Revolution,Red Room Townsend,Peace in Our Times,Green Room ; proc print ; run;Cards语句语句Cards语句与datalines语句可以通用如果输入数据中含有分号,可用cards4语句或datalines4语句,同时,数据结尾用4个分号表示数据输入结束Cards4例Cards语句语句Cards4例data; i

19、nput number citation $50.; cards4;1 Berry2 LIN ET AL., 1995; BRADY, 19933 BERG, 1990; ROA, 1994; WILLIAMS, 1992;run;proc print;run;变量类型转换变量类型转换 字符自动转换为数值字符自动转换为数值 例例2.15 字符自动转换为数值。字符自动转换为数值。data;X=1; /*X为数值变量 */Y=10; /*Y为字符变量 */X=Y; /*将字符变量赋值给一个数值变量时,自动将字符变量Y转换为数值变量 */ run;data;X=1; /*X为数值变量 */Y=10;

20、 /*Y为字符变量 */Z=X+Y; /*算术表达式中有字符变量时,自动将字符变量Y转换为数值变量 */run;data;X=1; /*X为数值变量 */Y=10; /*Y为字符变量 */if XY ; /*字符与数值变量进行比较时,自动将字符变量Y转换为数值变量 */run;data;Y=10; /*Y为字符变量 */Z=log(Y); /*需要数值变量的函数中引用字符变量时,自动将字符变量Y转换为数值变量 */run;函数函数INPUT将字符转换为数值将字符转换为数值 INPUT函数的形式:INPUT(数据源, 输入格式);其中:数据源为要转换为数值的变量,常数或表达式。数据源既可以是数值

21、型,也可以是字符型。输入格式规定对数据源进行转换的输入格式。例例2.16 转换字符变量为数值变量。转换字符变量为数值变量。Libname resdat “D:ResDat”;data a(keep=code);set ResDat.lstkinfo;code=input(stkcd, 6.);run;数据集Acode1245200011200012数值自动转换为字符数值自动转换为字符 例例2.19 数值自动转换为字符。数值自动转换为字符。data;X=10; /*X为字符变量 */Y=10; /*Y为数值变量 */X=Y; /*自动将数值变量Y转换为字符变量 */ run;日志信息:10 da

22、ta;11 X=10; /*X为字符变量 */12 Y=10; /*Y为数值变量 */13 X=Y; /*自动将数值变量Y转换为字符变量 */14 run;NOTE: 数字值已转换为字符值,位置:(行:列)。 13:3NOTE: 数据集 WORK.DATA2 有 1 个观测和 2 个变量。NOTE: “DATA 语句”所用时间(总处理时间): 实际时间 0.03 秒 CPU 时间 0.00 秒data;Y=10; /*Y为数值变量 */Z=ROOM|Y; /*自动将数值变量Y转换为字符变量 */ put Z=;run;Z=ROOM 10函数函数PUT将数值转换为字符将数值转换为字符 PUT函数

23、的形式:PUT(数据源, 输出格式);其中:数据源为要转换为字符值的变量,常数或表达式。数据源既可以是数值型,也可以是字符型。输出格式规定对数据源进行转换的输出格式。Data a;Y=3888.00;X=put(y,6.2);Run;Data a;X=put(288.00,$4.)Run;Put 语句语句Put语句负责在log窗口输出一些结果,file print选项可把输出转移到output窗口Put _infile_ (输出最新的数据行到SAS log 窗口)Put _all_ (输出所有变量的值)Put _page_ (输出新页)Put例、put1例Put 语句语句data; /*fil

24、e print;*/ /* change the output window*/ put 1230*SAS学习; run; proc print ; run;Put 语句语句data put; input x y; z=x+y; put _infile_; /*put _all_;*/ put _n_=; /*_N_ 为观察数,表示数据步的迭代次数 */ cards;10 20100 2001000 2000;run;错误类型与处理错误类型与处理 SAS系统能够检查出错误类型有:句法错;词义错;运行错;数据错;与宏有关的错。SAS系统提交含有错误的程序后,LOG窗口会显示的信息有:出错的词;错

25、误的可能位置;对错误的说明。句法错句法错 例例2.22 关键词拼写错。关键词拼写错。daat a; /*将data错拼为daat */x=2;run;日志窗口信息:4 daat a; /*将data错拼为daat */ - 14WARNING 14-169: 假定符号 DATA 错拼为 daat。5 x=2;6 run;NOTE: 数据集 WORK.A 有 1 个观测和 1 个变量。NOTE: “DATA 语句”所用时间(总处理时间): 实际时间 0.06 秒 CPU 时间 0.04 秒 例例2.23 遗漏分号。遗漏分号。data a;inputx y;z=x+y;list;cards;1 2

26、3 45 6;run;词义错词义错 例例2.26 变量名拼写错。变量名拼写错。proc print data=ResDat.Idx000001 (obs=10);var data clpr; /* 将变量名Date拼成Data */run;日志窗口信息:7 proc print data=ResDat.Idx000001 (obs=10);NOTE: 正在写入 HTML Body(主体)文件: sashtml.htm8 var data clpr; /* 将变量名Date拼成Data */ERROR: 变量 DATA 没有找到。9 run;NOTE: SAS 系统由于错误而停止了该步的处理。N

27、OTE: “PROCEDURE PRINT”所用时间(总处理时间): 实际时间 0.71 秒 CPU 时间 0.20 秒运行错运行错 例例2.28 非法的数学运算。非法的数学运算。data A;input Stock $ Money Price;vol= Money /Price;cards;600001 1329 6.3000895 2000 0;run;例中,0作除数是非法的数学运算。数据错数据错 例例2.29 数值变量读字符值。数值变量读字符值。data A;input Name $ Age;cards; Wang 35 Zhang A2 Hu 22 ; proc print;run;1

28、0 data A;11 input Name $ Age;12 cards;NOTE: 对 Age 无效的数据(在行 14 13-14 中)。RULE: -+-1-+-2-+-3-+-4-+-5-+-6-+-7-+-8-+-9-+-14 Zhang A2Name=Zhang Age=. _ERROR_=1 _N_=2NOTE: 数据集 WORK.A 有 3 个观测和 2 个变量。NOTE: “DATA 语句”所用时间(总处理时间): 实际时间 0.09 秒 CPU 时间 0.06 秒16 ;17 proc print;18 run;NOTE: 从数据集 WORK.A 读取了 3 个观测。NOTE: “PROCEDURE PRINT”所用时间(总处理时间): 实际时间 0.25 秒 CPU 时间 0.07 秒日志窗口信息:SAS程序书写规则程序书写规则 SAS语句的书写规则灵活自由:语句可在行的任一列开始;一个语句可以分写为多行;多个语句可以写在同一行;语句中各项之间至少用一个空格或特殊字符隔开;应遵守的书写规则:不同程序步间留空行;每条语句都要另起行。比较规范的书写有助于阅读和检查,还可以减少书写错误。注释语句的两种格式:/* 注释内容 */ * 注释内容;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号