当前位置:文档之家› 常用SAS函数简介

常用SAS函数简介


152.3 146.7
150.6 148.1
5. 截取函数简介
SAS截取函数应用举例

例5:请把STD=1.92354和CV=0.601106用 3个不同的截取函数(ceil、int、round)进行运 算,并分析这些函数的作用。
q1=2.9199855804 q2=13.894376071
利用HELP查找SAS系统提供的各种函数
Help下拉菜单
SAS 帮助 与文件
索引中键入: SAS Function
SAS函数种类


在SAS系统9.1版本,SAS函数分为二十五种类型, 分别是算术函数、截取函数、数学函数、概率 和密度函数、分位数函数、非中心函数、样本 统计函数、随机数函数、财政金融函数、日期 和时间函数、换算函数和特殊函数等。 在SAS系统6.12版本,SAS函数分为十七种类型 共有178个,SAS系统8.1版本,SAS函数分为二十 二种类型共有319个函数。
例1.2: 以日为单位计算当前日期的天数。
data; x=date (); y=today(); format x y yymmdd10.; put x= y=; run;
例1.3: 将时间值换算为以秒计数的 计算方法。
data; hms=hms (21,50,51); put hms=; x=21*60*60+50*60+51; put x=; mdy=mdy (08,18,2001); put mdy=; format mdy yymmdd10.; run;
练习1

计算以下数据表中日期值所在的年季月以及 处于某月的第几天、某周的第几天。
Date 1991-01-02 1991-01-03 1991-01-04 1991-01-05 1991-01-07 1991-01-08 1991-01-09 1991-01-10 1991-01-11 1991-01-12
练习 3

产生一个行变量名为2:6,列变量名为4:13 的二维数组,输出各维度上的上界和下界。
解答:
data; array mult{2:6,4:13} mult1-mult50; a=HBOUND(MULT); b=HBOUND2(MULT); c=lBOUND(MULT); d=lBOUND(MULT,2); put a b c d; run;
解答:
data _null_;
weekday=weekday('12JUL2007'd);
put weekday=; run;
Hale Waihona Puke 2. 数学函数

ABS (x) :求x的绝对值 Mod (x,y) :求x/y的余数 MAX (x1,x2,x3,…xn):求最大值 MIN (x1,x2,x3,…xn):求最小值 SQRT(x):求x的算术平方根 LOG(x):求x 的自然对数 EXP(x) :求指数函数ex SIN(x)、COS(x)、TAN(x):正弦、余弦、正切函数 …….
例3 数组元素自变量的缩写方法
array y{10} y1-y10; /*定义数组y{10} */ x=sum (of y{*}); z=sum (of y1-y10); 例中,两个SUM函数的表示法是等价的。
函数结果

通常函数的结果由其自变量的属性决定:
自变量是字符时结果变量为字符;
自变量是数值时结果变量为数值。
4. 样本统计量函数
简单统计量函数应用举例

例4:请求出2、4、6、3、1这五个数的最大 值、最小值、算术平均值、标准差、变异系数。
std_x=std(of x1-x5); cv_x=cv(of x1-x5); run; ods html; proc print data=simple_statistics; var max_x min_x mean_x std_x cv_x; run; ods html close;
data test4; input x1-x5; cards; 24631 ; run; data simple_statistics; set test1; max_x=max(of x1-x5); min_x=min(of x1-x5); mean_x=mean(of x1-x5);
用简便的方法实现例1中目的
data simple_statistics; max_x=max(2,4,6,3,1); min_x=min(2,4,6,3,1); mean_x=mean(2,4,6,3,1); std_x=std(2,4,6,3,1); cv_x=cv(2,4,6,3,1); run; ods html; proc print data=simple_statistics; var max_x min_x mean_x std_x cv_x; run; ods html close;
练习4

某农村地区1998年随机抽查测量10名13岁
女孩的身高,资料如下,试求全距、均值、
标准差、标准误、变异系数。
145.1 143.3 153.2 152.3 150.6 148.1 144.0 137.1 158.2 146.7
解答:
data aa; input x1-x10; cards; 145.1 143.3 153.2 144.0 137.1 158.2 ; run; data bb; set aa; a=range(of x1-x10); b=mean(of x1-x10); c=std(of x1-x10); d=cv(of x1-x10); file print; put a b c d; run;
2)参数个数:

有些函数不需要自变量,有些只需要一个自 变量,有些函数有多个自变量。 当函数有多个参数时,必须用逗号分隔开。
3)参数表示法:

4)参数名缩写方法: 函数名(OF 变量名1 … 变量名n )
参数的表示法举例

以逗号(,)分隔参数,如
sum(x1, x2, x3, x4, x5, x6, x7, x8)

PUT函数是一个例外,它不管自变量是什么
类型,其结果总是字符值。
用PUT语句在LOG窗口显示函数值
例4 显示概率值和分位数。
data; Y=probnorm(1.96); /* 标准正态分布Z小于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

ABS, SQRT, DIM UPCASE, SUBSTR, TRIM TODAY, DAY, MONTH, MDY LOG, EXP, GAMMA CNONCT, FNONCT, TNONCT PROBIT, CINV, TINV, FINV PROBNORM, PROBT, POISSON, PDF,PDM RANUNI, RANNOR, RANEXP SUM, MEAN, STD, VAR, RANGE PUT, INPUT, DIF, LAG SIN, TAN, ARCOS INT, CEIL, ROUND ZIPSTATE
函数类 Arithmetic Character Date and Time Mathematical Noncentrality Quantile Probability and Density Random Number Sample Statistic Special Trigonometric Truncation Others
SAS函数的形式: 函数名(参数1,参数2,…)

例如:
MEAN(x,y,z,a) MIN(SUM(x,y,z),1000)
SAS函数中的参数
1)参数类型: 变量名;常数;函数;表达式。

例1 函数及其参数类型举例。
自变量类型 变量名X,Y 常数 表达式
函数举例 Max(X,Y); X=sqrt(2500); Least=Min(sum(of x1-x10),y) ;

当日期值date=’14JUL2007’d时,试问这一天是 星期几?
解答:
data a; Input date YYMMDD10.; Cards; 1991-01-02 1991-01-03 1991-01-04 1991-01-05 1991-01-07 1991-01-08 1991-01-09 1991-01-10 1991-01-11 1991-01-12 ; Proc print; Format date YYMMDD10.; run; Data b; Set a; year=year (date); qtr=qtr (date); month=month (date); day=day (date); Weekday=weekday(date); proc print noobs; format date YYMMDD10.; Run;
Data; a=sin(0); b=sin(1.57); c=sin(3.14); proc print; format a 6.2 b 6.2 c 6.2; Run;
3. 数组函数
数组函数应用举例

例3:产生一个5×10×2的三维数组,并 提取各维度上元素的个数。
data; array mult{5,10,2} mult1-mult100; a=DIM1(MULT); b=DIM2(MULT); c=DIM3(MULT); put a b c; run;
1.日期时间函数简介
例1.1:计算两个日期之间相隔的天数
data _null_; sdate='01jan2012'd; edate='01jan2013'd; actual=datdif(sdate, edate, 'act/act'); days360=datdif(sdate, edate, '30/360'); 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;
相关主题