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;

运行结果:

SAS常用函数

日期时间函数

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;

运行结果:

SAS常用函数

字符型相关函数

字母大小写转换
upcase(”):转换为大写;
lowcase(”):转换为小写;
propcase(‘argument’

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

SAS常用函数
空格处理
trim(”):移除尾部空格;
left(”):移除首部空格;
strip(”):移除首尾空格;
compress(”):移除所有空格(或指定字符)
compress(source
data space;
    a=trim(' abcd  ');
    b=left(' abcd ');
    c=strip('abcd ');
    d=compress('  abcd  mn');
    e=compbl('  abcd   mn');
run;

运行结果:

SAS常用函数

去除变量的字符
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;

结果如下:

SAS常用函数
长度
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;

结果如下:

SAS常用函数
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;

结果如下:

SAS常用函数
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;

结果如下:

SAS常用函数
字符串连接
||:连字符;
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;

结果如下:

SAS常用函数
截取
substr(变量,起始位置
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;

运行结果:

SAS常用函数

查看Log会发现a2报错了,因为截取的长度超出了字符串的实际长度,所以在使用时应当留心或者采用substrn()函数来截取,错误提提示:

SAS常用函数
查找
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;

运行结果:

SAS常用函数
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;

运行结果

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

运行结果

SAS常用函数
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;

运行结果:

SAS常用函数

替换
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;

运行结果

SAS常用函数
变量类型转换
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;

运行结果

SAS常用函数
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;

运行结果

SAS常用函数

与缺失值相关的函数

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;

运行结果:

SAS常用函数

条件判断函数

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;

运行结果

SAS常用函数

Original: https://blog.csdn.net/qq_43776450/article/details/125393581
Author: 小王很nice
Title: SAS常用函数

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/693678/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球