03SAS函数与CALL子程序.ppt
《03SAS函数与CALL子程序.ppt》由会员分享,可在线阅读,更多相关《03SAS函数与CALL子程序.ppt(30页珍藏版)》请在三一办公上搜索。
1、第3章 SAS函数与CALL子程序,清华大学经管学院 朱世武ZResdat样本数据:SAS论坛:,SAS函数定义,SAS函数是一个子程序,对自变量返回一个结果值。SAS函数的形式:函数名(X1,X2,),函数用于组合表达式可以简化编程和统计计算,例3.1 表达式中用函数。data a(keep=date y d min);/*保留date,y,d,min四个变量*/set ResDat.idx000001;y=year(date);/*函数year给出变量date年份*/d=weekday(date);/*函数weekday给出变量date在一周内的哪一天*/min=min(sum(oppr,
2、hipr,lopr,clpr),1000);run;例3.2 条件语句中使用函数。data a;set ResDat.idx000001;where year(date)1996;/*Where语句中使用Year函数*run;,用函数处理多变量可以简化程序,例3.3 用与不用SAS函数时的程序。不用SAS函数。totx=xl+x2+x3+x4+x5+x6+x7+x8+x9+x10;if totxy then least=totx;else least=y;使用SAS函数。leastmin(sum(of x1-x10),y);例中,两段程序的结果相同,第二段只有一个语句,非常简单。,函数自变量,
3、自变量类型:变量名;常数;函数;表达式。例3.4 函数及其自变量类型举例。,自变量个数:有些函数不需要自变量,有些只需要一个自变量,有些函数有多个自变量。SAS9.1中,自变量个数不能超过32767。如果函数的自变量是表达式,在函数被调用之前,所有表达式自变量首先计算。自变量表示法:当函数有多个自变量时,必须用逗号分隔开。自变量名缩写方法:函数名(OF变量名1变量名n),例3.5 正确与错误的表示方法。例3.6 数组元素自变量的缩写方法。array y10 y1-y10;/*定义数组y10*/x=sum(of y*);z=sum(of y1-y10);例中,两个SUM函数的表示法是等价的。,函
4、数结果,通常函数的结果由其自变量的属性决定:自变量是字符时结果变量为字符;自变量是数值时结果变量为数值。PUT函数是一个例外,它不管自变量是什么类型,其结果总是字符值。根据缺省规则,对大多数函数来说,数值目标变量的长度是8,字符目标变量的长度没有缺省规则。目标变量长度不用缺省规则的函数见课本表3.1。,用PUT语句在LOG窗口显示函数值,例3.7 显示概率值和分位数。data;Y=probnorm(1.96);/*标准正态分布小于1.96的概率*/put Y;q1=tinv(.95,2);/*自由度为2的t分布的0.95分位数*/q2=tinv(.95,2,3);/*自由为2,非中心参数为3的
5、t分布的0.95分位数*/put q1=q2=;run;,0.9750021049q1=2.9199855804 q2=13.894376071,日期时间函数,SAS日期和时间存贮标准是以1960年1月1日0时0分0秒为起点,然后以相应的间隔记时。如1960年1月1日9时0分,按日记的数值就是0,按小时记的数值就是9。1960年1月2日0时0分,按日记的数值就是1,按小时记就是24等。由于日期函数是一类非常重要的函数,特别是对金融数据处理和金融计算,借助日期函数可以极大提高效率。,应用举例,例3.8 计算两个日期之间的天数。data _null_;sdate=01jan2002d;edate=
6、01jan2003d;actual=datdif(sdate,edate,act/act);/*按每个月的实际天数算*/days360=datdif(sdate,edate,30/360);/*按每个月30天计算*/put actual=days360=;run;data _null_;actual=datdif(01jan2002d,01jan2003d,act/act);days360=datdif(01jan2002d,01jan2003d,30/360);put actual=days360=;run;例中,两段程序的结果一样。actual=365,days360=360.,例3.10
7、 以日为单位计算当前日期的天数。data;x=date();y=today();put x=y=;run;例中,DATE()和TODAY()结果一样,都是返回当天的天数。当然,也可以用一定的日期格式表示它们。data;x=date();y=today();format x y yymmdd10.;put x=y=;run;,结果显示:x=17232 y=17232,结果显示:x=2007-03-07 y=2007-03-07,例3.12 计算日期值所在的年季月以及处于某月的第几天。data a;set ResDat.stk000001(obs=10);keep date year qtr mo
8、nth day;year=year(date);qtr=qtr(date);month=month(date);day=day(date);proc print noobs;run;,Date year qtr month day1991-01-02 1991 1 1 21991-01-03 1991 1 1 3 1991-01-04 1991 1 1 4 1991-01-05 1991 1 1 5 1991-01-07 1991 1 1 7 1991-01-08 1991 1 1 8 1991-01-09 1991 1 1 9 1991-01-10 1991 1 1 10 1991-01-1
9、1 1991 1 1 11 1991-01-12 1991 1 1 12,例3.14 将日期时间值换算为以秒计数的计算方法。data;mdy=mdy(08,18,2001);put mdy=;format mdy yymmdd10.;hms=hms(21,50,51);put hms=;x=21*60*60+50*60+51;put x=;dhms=dhms(date(),21,50,51);put dhms=;dhms=dhms(15263,21,50,51);put dhms=;y=15263*24*3600+x;put y=;run;,结果显示:mdy=2001-08-18hms=786
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 03 SAS 函数 CALL 子程序
链接地址:https://www.31ppt.com/p-5823118.html