SAS BASE数分--基础常用语句函数以及PROC步骤总结

2022-03-30 00:00:00 数据 函数 变量 语法 数值

一,函数篇

字符型函数:

1,compress函数 消除加保留

语法compress(V1,”AB”, ”I”)I是指删除V1中的AB时不分AB大小写

Compress(V1,” ”)指去掉V1中的缺失值

Compress(V2,”AB”,“K”)K是指保留AB

Eg:可以直接写compress(Z);不写空格代表默认消除空格;

2,substr函数 截取字符串

语法 substr(string,position,length)从第position开始截取截取length位数

EG: y=substr(v1,1,4);假如V1是20170414 那么Y为2017;


3,put函数 数值型变量转化成字符型变量(注意:日期本质是数值型变量SAS默认是1960年1月1日距离指定日期的天数)

语法 Put(V1,format.)

数值型转化为字符型

x=”01 jan 2007”D;

y=put(x,yymmdd10.);z=compress(Y,”-”);

Run;

4,tranward替代

语法:tranward(sours e, target, replacement);在变量V1中,用replacement替代target

EG3:y=tranward(V1,”ab”,”x”);

*tranward与compress在消除方面的不同点为:tranward可以先替代再消除固定AB,compress消除的对象为AB字母。Eg:compress(tranward(v1,”ab”,”x”),””);就只消除AB;Compress(v1,”ab”);就会消除ABA*

数值型函数:

1,input函数把字符型变量转化成数值型或者字符型变量

语法 y=input(sourse,informat)

Eg1:x1=’20071001’; x2=’021001’;

Y1=input(x1,yymmdd10.);Y2=input(x2,yymmdd8.)

Run;

Eg2:字符型转化为字符型

Y=input(“011”,$a.);

($a.是自定义format)

延伸小节

a,字符型转化为日期型的有两种方法

假如是20120606这样的字符型格式,变量名为date,

input语句:y=input(date,yymmdd10.);

mdy语句:y=mdy(substr(date,5,2)*1,substr(date,7,2)*1,substr(date,1,4)*1);

b,日期数值型转化为字符型用put;EG:Y=put(date,$10.);

c,数值型转化为日期型用mdy(取整求余数) EG:如果是20120606这样8位的数值型变量那么要求得本质是数值的日期型变量:y=mdy(mod(int(date/100),100),mod(date,100),int(date/10000));

2,Intck函数 找出间隔月,日,年

语法intck(interval, from,to)

Eg:y=intck(‘qtr’,x1,x2); 注意x1,x2都为日期型函数;返回的是X1日期到X2日期之间季度数。想要返回月份:用y=intck(‘month’,x1,x2); 想要返回天数:用y=intck(‘day,x1,x2);

3,Intnx函数 返回指定时间间隔的日期型

语法intnx(interval,startfrom, increment,<aligment>)

间隔时间年月日,开始日期,间隔步长,日期控制

日期控制的语法:b:返回间隔时常的起始值,m指返回间隔时长的中间值,E指返回间隔时常的末尾值。S:返回间隔步长的同值

Eg:取间隔一年后的同日

Y=intnx(‘year’,x1,1,’sameday’);

取间隔一个月后的末日

Y=intnx(‘month’,x1,1,’E’);

SEL语言函数

1,open函数

语法 open(SAS-set-name); 成功=1,失败=0

2,close函数

语法 close(SAS-SET-NAME);成功=0,失败=1

3,fetchobs函数 获取一条观测值,如果成功=0,失败非0

语法 y=fetchobs(sas-set-id,10);

4,varnum函数 获取某个变量的位置

语法 y=varnum(sas-set-id,name);

5,getvarc函数getvarn函数 返回某一字符型变量的值/数值型变量

语法 y=getvarc(sas-set-id var-num)

待更...------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

二,常用DATA PROC篇

SAS 语句分为DATA 步骤加上PROC步骤。

DATA 步骤是将特定规则的数据放入新建的数据集中,PROC步骤是用于对已有的数据集进行数据分析。

在此总结常用proc步。

1,proc freq 求分类型变量的频数分析

例子:数据集

SAS代码

对train这个数据集里面的gender性别求频数,它会输出


2,proc means 求数值型变量分布分析:统计量均值,中位数,标准差等。

例子,数据集

SAS语句

means 可以对指定变量profit求指定统计量,这里求了均值,分位数,标准差,大小可以求出来。还有标准误,方差等都可以求。

var 是统计量的对象,class是分组对象

结果

3,proc summary 求数值型变量分组汇总值

数据集:同上

SAS语句:


结果是将对Product_line产品线这个变量分组后对应的每组大小平均以及总和利润输出到新数据集中。


与means 不同,summary 可以输出到数据集,再进行加工,means主要直接产生报表。

4,proc contents 求整个数据集的数据概况,数量,观测,变量类型,长度等

数据集:同上

SAS语句:


结果:


5,proc print 打印出需要的特定规则的过滤后的,求值后的选择性变量的报表。

数据集:同上

SAS 代码:


noobs,不打印1234序列号,sum 加总利润,where筛选,contains 只要Product_group包含‘Kids’这个字符串,注意区分大小写。结果:


6,proc sort 对数据集按照某个字段按照顺序或者降序方式排序。

数据集:


SAS代码:

个对日期默认升序排序,第二个按照 产品线分组,对日期descending降序排序,第三组对产品线nodupkey去重。



7,proc format 自定义格式,运用格式

数据集:


SAS代码:


proc format 自定义格式,value 赋值,后面跟要把那些观测定义格式;data 步骤用于应用格式。结果


8,proc univariate 输出指定变量的距,统计量及分位数,一次性输出

数据集:同6

SAS代码:


结果:


9,proc surveyselect 随机抽样分层抽样

数据集:同6

SAS代码:

随机代码1

分层代码2


1,普通的随机抽样,抽取10个;2,用宏写的分层抽样,用Product_Line来分层抽样

结果1


输出的数据集的观测值是随机抽样的10个




结果2


输出的数据集的观测值是90个

10,proc append将几张吧=表表纵向拼接在一起。

见上例子

11,proc dataset 这个语句有很多功能,下面一一介绍:


用的多的是8modify,因为SAS是支持英文的数据集名称以及数据集所以经常会给数据集以及字段名称打上标签;还有3copy,批量将一个数据集里面的数据移动到另外一个指定数据集中。实际操作中,我们会将生产上的数据导出拷贝一份到新时间点的数据放入我们的指定逻辑库进行分析,而不会直接用生产上的数据。


待更......

相关文章