SAS常用语法

本文详细介绍了SAS语言的基本结构,包括DATA和PROC步骤的使用,以及常用的SAS函数,如字符与数字转换、日期处理、字符串操作和宏变量等。此外,还涵盖了数据处理操作,如数据导入、表的合并、转置、排序、去重和添加序号等。通过实例展示了SAS在实际问题中的应用,是学习SAS语言的重要参考资料。
摘要由CSDN通过智能技术生成

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基础知识介绍,值得一读。 前 言 --不要把学SAS 当作一件很时髦的事情,能用简单软件完成的事情就没有必要动用SAS;如果你的领域是统计,那应该考虑一开始就学习SAS。纵观市面上的SAS 书籍,发现SAS 教程也不少,但是大多都是统计应用的书籍,而讲解SAS 语言基础的书籍却很难见到。作为一门语言,语法教程的缺位是不应该的。较之于其他语言的语法教程比比皆是,这也确实是一种奇怪的现象。 目前大多的SAS 数据也并不是没有讲到基础内容,而是都草草的介绍了一些语言基础就开始把读者带入统计过程,本来有些初学者心态就很急,而作者这么快的就将读者带入应用领域,更加没有人去学好语言基础了。更有甚者,某些作者在书中写了一些所谓的标准程序,然后告诉读者只要按照标准程序去套用就行了,还声称这是学习SAS 最快捷的方法。因此,作者决定写一本语言基础的教程,详细的讲解SAS 语法。非常非常高兴我的第一本SAS 教程经历一个多月终于出炉了,将其命名为《SAS 语言抛砖引玉》。该教程讲解SAS 最最基础的知识,之所以说是基础,是因为它跟已有的教程有一个最大的区别--只有SAS 语言,没有任何统计过程。没有任何统计过程的好处是读者能够静下心来跟随作者一起去研究SAS 语言,弄懂它,吃透它;而不是刚会走就想着跑甚至想飞,还没学几条语句就想去做统计分析,到头来发现错误百出而又手足无措
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值