SAS函数与CALL子程序.ppt

  1. 1、本文档共57页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
SAS函数与CALL子程序

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函数。 least=min(sum(of x1-x10),y); 例中,两段程序的结果相同,第二段只有一个语句,非常简单。 函数自变量 自变量类型: ? 变量名; ? 常数; ? 函数; ? 表达式。 例3.4 函数及其自变量类型举例。 自变量个数: 有些函数不需要自变量,有些只需要一个自变量,有些函数有多个自变量。SAS9.1中,自变量个数不能超过32767。 如果函数的自变量是表达式,在函数被调用之前,所有表达式自变量首先计算。 自变量表示法: 当函数有多个自变量时,必须用逗号分隔开。 自变量名缩写方法: 函数名(OF变量名1…变量名n ) 例3.5 正确与错误的表示方法。 例3.6 数组元素自变量的缩写方法。 array y{10} y1-y10; /*定义数组y{10} */ 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; 日期时间函数 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(‘01jan2002’d, ‘01jan2003’d, ‘act/act’); days360=datdif(‘01jan2002’d, ‘01jan2003’d, ‘30/360’); put actual= days360=; run; 例中,两段程序的结果一样。actual=365, days360=360. 例3.10 以日为单位计算当前日期的天数。 data; x=date (); y=today(); put x= y=; run; 例中,DATE()和TODAY()结果一样,都是返回当天的天数。

文档评论(0)

zhuliyan1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档