1、06. 使用 SAS 函数(一)创建并定义新变量可以在数据步中,利用赋值语句创建或重新定义新变量(列) ,语法:变量名=表达式 ;注:(1)表达式可以是数值或字符常量、数学表达式、函数等;(2)加减乘除幂:+ - * / *,也可以使用括号。例 1 下面数据(C:MyRawDataGarden.dat)是番茄、南瓜、豌豆、葡萄的重量:代码:data homegarden;infile c:MyRawDataGarden.dat;input Name $ 1-7 Tomato Zucchini Peas Grapes;Zone = 14;Type = home;Zucchini = Zucchi
2、ni * 10;Total = Tomato + Zucchini + Peas + Grapes;PerTom = (Tomato / Total) * 100;run;proc print data = homegarden;title Home Gardening Survey;run;运行结果:程序说明:(1)5-8 行使用了 5 个赋值语句,第 6 行改写旧变量,运行结果将输出所有变量;(2)若观测值中有缺省值,相应的新变量也出现缺省值。(二)使用 SAS 函数一、SAS 函数概述SAS 自带数百个函数,主要包括以下函数类:字符/字符串函数 日期/时间函数距离/州/ 邮编代码函数数学
3、函数概率/描述统计/ 随机数函数金融函数宏函数变量信息函数函数基本调用形式(可以嵌套调用):函数名(参数 1,参数 2,);例 2 南瓜雕刻比赛的数据( C:MyRawDatapumpkin.dat)包含了参赛者的名字、年龄、雕刻的南瓜类型、报名日期、五位裁判给出的分数:代码:data contest;infile c:MyRawDataPumpkin.dat;input Name $16. Age 3. +1 Type $1. +1 Date MMDDYY10.(Scr1 Scr2 Scr3 Scr4 Scr5) (4.1);AvgScore = mean(Scr1, Scr2, Scr3,
4、 Scr4, Scr5);DayEntered = day(Date);Type = upcase(Type); /* 转化为大写 */run;proc print data = contest;title Pumpkin Carving Contest;run;运行结果:程序说明:(1) 均值函数 mean( )返回非缺省值参数的平均值;(2) day( )函数返回日期值距离 1961 年 1 月 1 日的天数。二、常用的数学函数int(x) 取整(舍去小数)round(x) 取整(四舍五入)log(x) 取自然对数log10(x) 取以 10 为底的对数max(x1,x2,) 返回最大值(
5、忽略缺省值)min(x1,x2,) 返回最小值(忽略缺省值)mean(x1,x2,) 返回平均值(忽略缺省值)sum(x1,x2,) 返回求和值(忽略缺省值)n(x1,x2,) 返回非缺省值的个数nmiss(x1,x2,) 返回缺省值的个数三、常用的日期函数datejul(day) 将日期数值 day 转化为 Julian 日期值today() 返回今天的日期数值mdy(mm,dd,yy) 将月 mm、日 dd、年 yy 转化为日期数值day(date) 返回日期数值的日month(date) 返回日期数值的月(1-12)year(date) 返回日期数值的年qtr(date) 返回日期数值的
6、季(1-4)weekday(date) 返回日期数值是周几( 1=星期日)yrdif(date1,date2, AGE)计算两个日期的“年龄差”示例:a=MDY(4,13,2000); b=MDY(8,13,2012);YRDIF(a,b,AGE); 返回 12.3342注:(1)日期数值 = 当前日期距离 1960 年 1 月 1 日的天数;(2)Julian 日期为当年的第多少天,例如 2 月 1 日是 32.四、常用的字符串函数返回 str 从 n 位置开始,第一次出现字母或数字的位置anyalnum(str, n) 示例:a=123 E St, #2 ; anyalnum (a); (
7、默认)返回 1; anyalnum (a,10); 返回 12anyalpha(str, n) 返回 str 从 n 位置开始,第一次出现字母的位置anydigit(str, n) 返回 str 从 n 位置开始,第一次出现数字的位置anyspace(str, n) 返回 str 从 n 位置开始,第一次出现空格的位置cat(str1,str2,) 拼接字符串 str1,str2,,开头和末尾加上空格cats(str1,str2,) 拼接字符串 str1,str2,,忽略空格catx(sign,str1,str2,) 拼接字符串(忽略空格) ,字符串间加分隔符 signcompress(str
8、, sign) 压缩字符串(去掉符号 sign,默认去掉空格)index(str, sign) 返回字符或子串 sign 首次在字符串 str 中出现的位置left(str)左对齐字符串 str示例:a= my cat; left(a); 返回 my cat lenth(str) 返回 str 的长度(忽略末尾空格,缺省值长度是 1)propcase(str) 将字符串 str 第一个字母大写,其余小写substr(str,pos,n) 从 str 第 pos 位置开始提取长度为 n 或直至结束的子串translate(str, to, from) 将 str 中的字符 from换成totranwrd(str, from,to)将 str 中的字符串from替换为to示例:a=Main Street; tranwrd(a,Street,St);返回 Main Sttrim(str) 去掉 str 末尾的空格upcase(str) 将 str 所有字母转化为大写