SAS常用函数

SAS函数是一个子程序,对自变量返回一个结果值。
SAS函数的基本形式:
y=函数名(X1,X2,…),其中X1,X2…为参数值

易混淆的概念

字符—character:一个一个地字符,如’a’,‘a’‘b’(‘ab’);
字符串—string:一个或多个字符组成的串,如’a’,‘ab’;
词—word:由分隔符(delimeter)隔开的字符串,如’I love programming’‘I@love@programming’;

数值函数

mod(x,y):返回x除以y的余数;
int(x):返回x的整数部分;
ceil(x):返回≥x的最小整数;
floor(x):返回≤x的最大整数;
round(x,舍入值):根据舍入值对x进行舍入,即将x舍入到最接近能被舍入值整除的数值;
abs(x):返回x的绝对值;
log(x):返回x的自然对数值;
sqrt(x):返回x的平方根;
exp(x):返回x的指数值;

data a;
	num1=round(8.6,0.1);
	num2=round(8.6,1);
	num3=round(8.6,2);
	a=mod(10,3);
	b=int(8.6);
	c=ceil(8.6);
	d=floor(8.6);
	e=abs(-8.6);
	f=sqrt(4);
	g=log(4);
	h=exp(4);
run;
proc print;
run;

运行结果:
在这里插入图片描述

日期时间函数

date()、today():返回当天的日期;
year()、month()、day()和qtr():分别提取一个日期中的年、月、日、季度;
mdy(month,day,year):将月、日、年组合成完整日期;
intck(‘’custom-inteval‘’,start-date,end-date):返回在一个给定的时间跨度内发生的时间间隔的数量,可以用来计算天day、周week、月month、年year、季度qtr等;
yrdif(开始日期,结束日期,“计算依据”):当计算依据为actual时,计算两个日期之间以年为单位的差值;当计算依据为age时,计算两个日期之间的年龄差值;
datdif(开始日期,结束日期,“计算依据”):当计算依据为actual时,计算两个日期之间以天为单位的差值;

data datetime;
	format td date yymmdd10.;
	da=date();							
	td=today();						

	year=year(td);				
	month=month(td);			
	day=day(td);				
	q=qtr(td);							
	date=mdy(8,02,2018);				

	yd=yrdif(date,td,'actul');	
	age=yrdif(date,td,'age');	
	dd=datdif(date,td,'actul');

	days=intck('day',date,td);	
run;

运行结果:
在这里插入图片描述

字符型相关函数

字母大小写转换
upcase(‘’):转换为大写;
lowcase(‘’):转换为小写;
propcase(‘argument’<,‘delimiters’>):各单词首字母大写,其余小写,默认的分隔符delimiters是空白,正斜杠,连字符、开括号、句号和制表符;

data change_case;
	a=upcase('abc');			
	b=lowcase('Abc');			
	c=propcase('ab cD');		
run;

在这里插入图片描述
空格处理
trim(‘’):移除尾部空格;
left(‘’):移除首部空格;
strip(‘’):移除首尾空格;
compress(‘’):移除所有空格(或指定字符)
compress(source<,character><,modifier(s)>)
compbl(‘’):将多个连续空格,压缩为1个;

data space;
	a=trim(' abcd  ');
	b=left(' abcd ');
	c=strip('abcd ');
	d=compress('  abcd  mn');
	e=compbl('  abcd   mn');
run;

运行结果:
在这里插入图片描述

去除变量的字符
compress(变量<,要去除的字符><,修饰符>)
修饰符常用:

修饰符含义
a去除掉变量中的所有字母
d去除掉变量中的所有数字
s去除掉变量中的所有空格
i忽略大小写
k保留“要去除的字符”,去除掉其它字符
data compress;					/*移除所有空格或特殊字符*/
	input p& $ 1-20;
	q1=compress(p);
	q2=compress(p,'(-)');
	q3=compress(p,'(-)','d');
	q4=compress(p,,'d');
	q5=compress(p,'(-)','s');
	q6=compress(p,'(-)','k');
	datalines;
		(123)456-7890
		(123)456-78 90
	;
run;
proc print;
run;

结果如下:
在这里插入图片描述
长度
length(变量):返回变量值长度,尾部空格不计数,空字符串与连续空格视为1个字符串;
lengthn(变量):返回变量长度,尾部空格不计数,空字符串与连续空格视为0个字符串;
lengthc(变量):返回变量值长度,对首尾空格及连续空格计数,空字符串记为1个字符;

data length;
	a='';			/*没有空格*/
	b=' ';		/*有一个空格*/
	c='   ';		/*有三个空格*/
	d=' ABC DEF ';	/*首尾及中间各有一个空格*/
	e=' ABC DEF';	/*首部及中间各有一个空格*/
/*	返回变量值长度,尾部空格不计数,空字符串与连续空格视为1个字符串*/
	length_a=length(a);
	length_b=length(b);
	length_c=length(c);
	length_d=length(d);
	length_e=length(e);
run;
proc print;
run;

结果如下:
在这里插入图片描述

data lengthn;
	set length(keep=a b c d e);
/*	返回变量值长度,尾部空格不计数,空字符串与连续空格视为0*/
	lengthn_a=lengthn(a);
	lengthn_b=lengthn(b);
	lengthn_c=lengthn(c);
	lengthn_d=lengthn(d);
	lengthn_e=lengthn(e);
run;
proc print;
run;

结果如下:
在这里插入图片描述

data lengthc;
	set length(keep=a b c d e);
/*	返回变量值长度,对首尾空格及连续空格计数,空字符串为1*/
	lengthc_a=lengthc(a);
	lengthc_b=lengthc(b);
	lengthc_c=lengthc(c);
	lengthc_d=lengthc(d);
	lengthc_e=lengthc(e);
run;
proc print;
run;

结果如下:
在这里插入图片描述
字符串连接
||:连字符;
cat(x,y):直接连接;
catt(x,y):去尾部空格再连接;
cats(x,y):去首尾空格再连接;
catx(‘’,x,y):去首尾空格,用分隔符连接;

data link;
	x=' 性别 ';
	y=' 女 ';
	a=x||y;				/*连字符,直接连接*/
	b=cat(x,y);				/*直接连接*/
	c=catt(x,y);			/*去尾部空格,再连接*/
	d=cats(x,y);			/*去首尾空格,再连接*/
	e=catx(':',x,y);			/*去首尾空格,用分隔符连接*/
run;

结果如下:
在这里插入图片描述
截取
substr(变量,起始位置<,提取长度>):提取字符串;如果字符串是汉字,用ksubstr()来提取;
substrn(变量,起始位置<,提取长度>):提取字符串;允许长度为0或超出;
scan(string,n<,delimiters>):返回第n个word,分隔符delimiters若没有指定,默认的有blank . < ( + | & ! $ * ) ; ^ - / , %;

data substr_scan;
	a1=substr('ABCDEF',3);
	b1=substrn('ABCDEF',3,2);

	a2=substr('ABCDEF',5,3);
	b2=substrn('ABCDEF',5,3);

	a3=scan('AB CDEF',1);
	b3=scan('AB@CDEF',-1,'@');


	id='D12';
	city='一线城市';
	c=substr(id,2,1);
	c1=substr(id,2);

	d=substr(city,3,2);
	d1=substr(city,2);

	e=ksubstr(city,3,2);
	e1=ksubstr(city,2);
run;
proc print;
run;

运行结果:
在这里插入图片描述

查看Log会发现a2报错了,因为截取的长度超出了字符串的实际长度,所以在使用时应当留心或者采用substrn()函数来截取,错误提提示:
在这里插入图片描述
查找
index(‘x’,‘y’):在x中查找字符串y,返回第一次出现的位置,找不到返回0,如果字符串是汉字使用kindex()函数查找字符串;
indexw(‘x’,‘y’):在x中查找word y,返回第一次出现的位置,找不到返回0;
indexc(‘x’,‘y’):在x中查找字符y,返回第一次出现的位置,找不到返回0;

/***********查找函数 index kindex indexw indexc***********/
data index;
	a1=index('abcd cd', 'cd');
	b1=index('abcd cd', 'dc');

	a2=indexw('abcd cd', 'cd');
	b2=indexw('abcd cd', 'dc');

	a3=indexc('abcd cd', 'cd');
	b3=indexc('abcd cd', 'dc');    /*将'dc'拆分为两个字符,哪个字符先出现,就返回哪个字符的位置*/
run;
proc print;
run;

运行结果:
在这里插入图片描述

data index1;		/*注意空格,定义长度后,变量不满的部分会用空格填充*/
   length a b $14;   /*$14. 同样*/
   a='ABC.DEF (X=Y)';
   b='X=Y';
   q=index(a,b);
   w=index(a,trim(b));
   put q= w=;
run;
proc print;
run;

运行结果
在这里插入图片描述

data kindex;
	text1='汉字汉字汉字';
	a=kindex(text1,'字汉');
	a1=index(text1,'字汉');
	text2='汉字';
	b=kindex(text1,text2);
	b1=index(text1,text2);
run;
proc print;
run;

运行结果
在这里插入图片描述

data indexc;
	a='ABC.DEP (X2=Y1)';
	x=indexc(a, '0123', ';()=.');
	put x;
	b='have a good day';
	y=indexc(b, 'pleasant', 'very');
	put y;
run;
proc print;
run;

运行结果:
在这里插入图片描述

替换
translate(字符串,替换后的字符,需要替换的字符):替换字符函数;
tranwrd(字符串,需要替换的字符串,替换后的字符串):替换字符串函数,子字符串中含有尾部空格时,要用trim()删除,替换后的字符串长度为0时,替换为1个空格,替换后的字符串为多个空格时,替换为相应数目的空格;

/***********替换函数 translate tranwrd***********/
data translate;
	a1=translate('XYZW','A''B','V''W');
	b1=translate('XYZW','AB','VW');
	string1='AABBAABABB';
	c1=translate(string1,'12','AB');

	a2=tranwrd('XYZW','VW','AB');
	string1='AABBAABABB';
	c2=tranwrd(string1,'AB','12');
run;
proc print;
run;

运行结果
在这里插入图片描述
变量类型转换
input(source,informat)函数:把字符串转换为数值函数或其他类型的字符型函数;
put(source,format)函数:把数值型转换为字符型函数或其他类型的字符型函数

data input;							/*将字符型转换成数值型*/
	a=input('123.5',best.);

	input sale $9.;
	fmtsale=input(sale, comma9.);
	datalines;
2,115,353
;
run;
proc print;
run;

运行结果
在这里插入图片描述

proc format;
	value $ sex 'F'='Female'
			    'M'='Male';
run;
data put;							/*将数值型转换成字符型*/
	format b $sex.;
	a=put(123,8.2);
	b=put('F',$sex.);

	numdate=122591;
	chardate=put(numdate, z6.);
	sasdate=input(chardate, mmddyy6.);
run;
proc print;
run;

运行结果
在这里插入图片描述

与缺失值相关的函数

n(变量1,变量2,…):返回非缺失值的个数(针对数值型变量或常量),即统计数值型变量非空个数;(多个变量时,不是同时满足缺失,而是一个记一个数,下同)
nmiss:返回缺失值的个数(针对数值型变量或常量,将字符型变量的所有值都当作缺失值);
cmiss:返回缺失值的个数(数值型、字符型均可);
not missing:如果是缺失的,则返回0;反之,则返回1;
missing:如果是缺失的,则返回1;反之,则返回0;
call missing:对参数进行操作,置空;

/***********缺失值函数 n,nmiss,cmiss,not missing,missing,call missing************/
data class;
	set sashelp.class;
	if age=13 then call missing(weight,sex);
	a=n(age,weight);
	b=nmiss(age,weight);
	c=cmiss(sex,weight);
	d=not missing(sex);
	e=missing(sex);
	drop name height;
run;
proc print;
run;

运行结果:
在这里插入图片描述

条件判断函数

ifc(条件,执行语句1,执行语句2):返回字符型变量或常量,如果满足条件则执行执行语句1,反之,执行执行语句2;
ifn(条件,执行语句1,执行语句2):返回值数值型变量,如果满足条件则执行执行语句1,反之,执行执行语句2;

/************条件判断函数 ifc ifn***********/
data if;
	score1=85;
	a1=ifc(score1>95,"Great","Not Great");
	a2=ifc(score1>60,"Great","Not Great");

	score2=60;
	b=ifn(score2>90,5,6);

	score3=.;
	c1=ifn(score3<90,2,3);
	c2=ifn(score3=.,.,ifn(score3<90,2,3));
	if score3=. then c3=.;
		else if score3<90 then c3=2;
		else c3=3;
	if not missing(score3) then
		d=ifn(score3<90,2,3);
run;
proc print;
run;

运行结果
在这里插入图片描述

  • 10
    点赞
  • 113
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值