SAS函数与CALL子程序

上传人:go****ng 文档编号:244928316 上传时间:2024-10-06 格式:PPT 页数:30 大小:339KB
返回 下载 相关 举报
SAS函数与CALL子程序_第1页
第1页 / 共30页
SAS函数与CALL子程序_第2页
第2页 / 共30页
SAS函数与CALL子程序_第3页
第3页 / 共30页
点击查看更多>>
资源描述
Title text should go hereEven if on two lines(but not three),First level,Second level,Third level,第,3,章,SAS,函数与,CALL,子程序,清华大学经管学院 朱世武,Resdat,样本数据:,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,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.4,函数及其自变量类型举例。,自变量个数:,有些函数不需要自变量,有些只需要一个自变量,有些函数有多个自变量。,SAS9.1,中,自变量个数不能超过,32767,。,如果函数的自变量是表达式,在函数被调用之前,所有表达式自变量首先计算。,自变量表示法:,当函数有多个自变量时,必须用逗号分隔开。,自变量名缩写方法:,函数名(,OF,变量名1变量名,n),例,3.5,正确与错误的表示方法。,例,3.6,数组元素自变量的缩写方法。,array,y,10,y1-y10;,/*,定义数组,y10*/,x=sum(of y*);,z=sum(of y1-y10);,例中,两个,SUM,函数的表示法是等价的。,函数结果,通常函数的结果由其自变量的属性决定:,自变量是字符时结果变量为字符;,自变量是数值时结果变量为数值。,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的,t,分布的0.95分位数*/,put,q1=q2=;,run,;,0.9750021049,q1=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=,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,以日为单位计算当前日期的天数。,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-0,3,-0,7,y=2007-0,3,-0,7,例,3.12,计算日期值所在的年季月以及处于某月的第几天。,data,a;,set ResDat.stk000001(obs=10);,keep date year qtr month day;,year=year(date);,qtr=qtr(date);,month=month(date);,day=day(date);,proc print,noobs;,run,;,Date year qtr month day,1991-01-02 1991 1 1 2,1991-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-11 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-18,hms=78651,x=78651,dhms=1347832251,dhms=1318801851,y=1318801851,概率分布函数,标准正态分布,PROBNORM,(X),计算标准正态分布随机变量小于,X,的概率。,例,3.15,计算三个特殊的正态概率值。,data,;,P1=probnorm(,0,);,P2=probnorm(,1.96,);,P3=probnorm(,2.5758293,);,put,P1=P2=P3=;,run,;,结果显示:,P1=0.5,P2=0.9750021049,P3=0.9949999999,样本统计函数,样本统计函数在实际中的用处不是很大,因为应用这些函数时,一定要把样本的观测数据放在同一行才可以,现实中样本的观测数据却往往是按一列一列排的。一般情况下,求变量,X,的样本统计函数值时要用别的方法。,样本统计量函数共有15个。,均值,MEAN,(of xl-xn),或,MEAN,(x,y,z,),计算非缺失自变量的算术平均。自变量中至少有一个非缺失值。,求和,SUM,(of xl-xn),或,SUM,(x1,x2,),计算自变量的和。要求有两个以上自变量。,方差,VAR,(of xl-xn),或,VAR,(x1,x2,),计算自变量中非缺失值的方差。要求至少有两个自变量。,随机数函数,SAS,系统提供11种随机数函数。由于随机数函数是进行随机模拟的基础,这里我们通过例子,给出每种随机数发生程序,供读者参考。,正态分布,例,3.27,用函数,RANNOR,产生正态分布随机数。,data,RV;,retain,_seed_,0,;,/*retain,赋初值0给_,seed_*/,mu=,0,;,sigma=,1,;,do,_i_=,1,to,1000,;,Normal1=mu+sigma*rannor(_seed_);,/*,均值为,mu,标准差为,sigma*/,output,;,end,;,drop,_seed_ _i_ mu sigma;,run,;,Normal1,-0.9721,-0.70001,-2.34007,-0.10939,-0.01883,-0.64154,0.818766,0.221107,例,3.28,用函数,NORMAL,产生正态分布随机数。,data,RV;,retain,_seed_,0,;,mu=,0,;,sigma=,1,;,do,_i_=,1,to,1000,;,normal1=,0,+,1,*normal(_seed_);,/*,均值为,mu,标准差为,sigma*/,output,;,end,;,drop,_seed_ _i_;,run,;,均匀分布,例,3.29,用函数,RANUNI,产生均匀分布随机数。,data,RV1;,retain,_seed_,0,;,a=-,1,;,b=,2,;,do,_i_=,1,to,1000,;,uniform1=a+(b-a)*ranuni(_seed_);,/*,区间,a,b,上的均匀分布*/,output,;,end,;,drop,_seed_ _i_;,run,;,例,3.30,用函数,UNIFORM,产生均匀分布随机数。,data,RV1;,retain,_seed_,0,;,a=-,1,;,b=,2,;,do,_i_=,1,to,1000,;,uniform1=a+(b-a)*uniform(_seed_);,/*,区间,a,b,上的均匀分布*/,output,;,end,;,drop,_seed_ _i_;,run,;,随机数函数自变量,SEED,随机数函数使用一个自变量,SEED,来选择产生随机数的初始种子值,由这个值开始产生随机数流。自变量,SEED,的取值和初始化类型如下表列出。,表,3.4 SEED,取值与初始化类型,产生随机数的过程中,自变量,SEED,的值保持不变,种子则不断变化。所以,用随机函数产生随机数时,不能控制种子的值,因此也不可能控制初始化之后的随机数。如果要控制随机数流,就要用随机数函数的,CALL,子程序。,SAS CALL,子程序,SAS,系统提供一系列,CALL,子程序,用于产生随机数或执行其它的系统功能,详见表,3.5,,,3.6,。,随机数子程序,用随机数子程序可以更好地控制种子流和随机数流。除,NORMAL,和,UNIFORM,这两个函数之外,所有随机数函数都有一个相应的子程序。,CALL,语句激活随机数子程序的格式为:,CALL,routine(seed,variate),;,选项说明:,使用
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!