SAS语言由DATA和PROC两个基本步骤任意组合形成
常用SAS函数:
字符和数字转换
字符-->数字:input(字段,5.2) 5.2表示共5位数字,小数点前3位,小数点后2位
数字-->字符:put(字段,$10.) $10.表示长度为10的字符
数字前加0/删0
删掉字符前的0:input(var1,best.)
数字前加0(例如1->001):put(var1,z3.)
取日期
取某月月初:intnx('month',日期,0,'b')
取某月月末:intnx('month',日期,0,'e')
取上月月初:intnx('month',日期,-1,'b')
取上月月末:intnx('month',日期,-1,'e')
取下月月初:intnx('month',日期,1,'b')
取下月月末:intnx('month',日期,1,'e')
取第一个非空值
字符:coalescec(数据1,数据2)
数字:coalesce(数据1,数据2)
md5加密
put(md5("xxxxxxxxx"),$hex32.)
删除空格
左侧空格移动到右侧:left()
右侧空格移动到左侧:right()
删除结尾的空格:trim()
删除所有空格:compress()
删除前后的空格:strip()
字符串转日期:
/*截取出日期,用input转换成日期*/
input(substr(包含日期的字符串,1,8),yymmdd8.) format=yymmdd10.
/*截取出年月日,用mdy转换成日期*/
mdy(input(substr(包含日期的字符串,5,2),2.),input(substr(包含日期的字符串,7,2),2.),input(substr(包含日期的字符串,1,4),4.)) format=yymmdd10.
截取字段最后两位
substr(字段名,length(字段名)-2,length(字段名))
剔除字段最后两位
substr(字段名,1,length(字段名)-2)
常用步骤:
导入数据
data exam;
input name$ class score;
datalines;
john 1 90
amy 2 88
daisy 3 70
;
runl;
$表示该字段是字符
表的串接(纵向合并,等同sql中的union all):
data 表名3;
set 表名1 表名2 ;
run;
表的转置(字段1是行,字段2是列):
proc transpose data=表名1 out=表名2(drop=_NAME_)
by 字段1;
ID 字段2;
run;
排序(默认升序):
proc sort data=表名;
by 字段名1 descending 字段名2;
run;
(SAS默认升序,descending作用于后面的字段)
去重(取第一次出现的那一行):
proc sort data = 表名1 out=表名2 nodupkey;
by 字段名1 (字段名2);
run;
添加序号:
data 表名1;
set 表名1;
rank_num=_n_;
run;
分组添加序号(默认升序,降序使用descending):
proc rank data=表名1
out = 表名2 (descending);
var 字段名1;(根据什么字段来排序,如交易时间)
by 字段名2;(用什么字段进行分组,如客户号)
ranks 字段名3;(序号的字段名)
run;
sql写法(默认升序):
row_number() over (partition by 字段名1 order by 字段名2) (根据字段名1分组,字段名2排序)
宏变量:
定义宏变量:
%let 宏变量名 = 宏变量值;
调用宏变量:
&宏变量名.
查看宏变量:
%put &宏变量名.;
宏函数:
宏函数%sysfunc用来调用SAS函数
宏函数%eval用来处理算数表达式
举例:
/*当前日期,比如20231231*/
%let riqi = %sysfunc(today(),yymmddn8.);
/*前一天日期,比如20231230*/
%let riqi1 = %eval(%sysfunc(today(),yymmddn8.)-1);
/*前一天日期,比如20231230*/
%let riqi2 = %sysfunc(intnx(day,%sysfunc(today(),8.),-1),yymmddn8.);
不常用SAS函数:
求平均值:mean()
将字段中的"-“替换成空:compress(字段名,”-")
取字符长度:length(字段)
生成日期:mdy(m,d,yr) 生成yr年m月d日的SAS日期值
生成时间:hms(h,m,s) 由小时h、分钟m、秒s生成SAS时间值
删除字符中的-:compress(字段名,‘-’)
删除字符中的“-”和“,”(这里是和的关系,并不会当作一个整体):compress(字段名,‘-,’)
替换指定字符(这里会把字符串1当作一个整体,整体替换):tranwrd(字段名,字符串1,字符串2)
用“-”分隔字符串取第一个:scan(字段名,1,‘-’)
用“-”分隔字符串取最后一个:scan(字段名,-1,‘-’)
本文详细介绍了SAS语言的基本结构,包括DATA和PROC步骤的使用,以及常用的SAS函数,如字符与数字转换、日期处理、字符串操作和宏变量等。此外,还涵盖了数据处理操作,如数据导入、表的合并、转置、排序、去重和添加序号等。通过实例展示了SAS在实际问题中的应用,是学习SAS语言的重要参考资料。
2832

被折叠的 条评论
为什么被折叠?



