SAS程序

首次写博客不知该如何写起,随便写点吧

那就说说这几天使用的SAS程序吧,接触SAS软件很久了但是认真学习SAS还是最近开始的,所以说嘛 自己也是个菜鸟。

在学习SAS中个人感觉该软件换是非常强大的,比如数据库方面,自带数据库。

要做数据挖掘,首先要学会取数,其次在做数据分析,最后设计适应业务的算法程序,个人观点微笑

取数的话数据库的了解是必不可少的,SQL语言还是要比较熟悉的。

刚好SAS中就有这个模块

SAS中proc sql;这个要写sql的标志。

例如:

proc sql;

select *

from b

;

quit;

如果要建临时表则:

proc sql;

create table class.a as

select * 

from b

;

quit;

所以以上该模块可取到你想要的数据,接下来就是分析了,而分析就比较庞杂了;

比如缺失值的统计:

proc means data=class.aa nmiss noprint;
var var1 var2;

output out=miss(drop=_type_ _freq_) nmiss=;

run;

这一步就可以统计出变量的缺失值情况(该方法只使用数值型变量,字符型变量不适应)

接下来是异常值的检验方法:

proc means data=jianmo.xiao_fei_1 mean std Skewness Kurtosis Median mode min max;

var var1 var2;

run;

是否有异常值,如有异常值,要处理这些异常值,异常值的处理方法如下:

对于连续的变量采用的方法有:四分位数异常值处理 、0.01分位数和0.99分位数替代上下限法

对于非连续的变量可人工处理

这里只要针对连续性变量做介绍:本人比较倾向于,0.01分位数和0.99分位数替代上下限法来处理异常值,程序如下:

%macro yy(dsn=  ,outdsn= ,outext=);
**得到解释变量列表;
proc transpose data=&dsn(obs=1) out=dsnvarlist(keep=_name_);
var _numeric_;
run;
***如果数据集outdsn已存在,则删除;
%if %sysfunc(exist(&outdsn)) = 1 %then %do;
proc delete data=&outdsn;
run;
%end;
***如果数据集outext已存在,则删除;
%if %sysfunc(exist(&outext)) = 1 %then %do;
proc delete data=&outext;
run;
%end;
/*先生成记录各变量各分类变量的各统计变量的空表*/
proc sql noprint;
   create table &outext
       (varname char(50),
P_1 num,
P_99 num);
quit;
***逐个计算变量统计量:四分位数;
%let dsid0=%sysfunc(open(dsnvarlist,in));
%if &dsid0 %then %do;
%do i=1 %to %sysfunc(attrn(&dsid0,Nobs));
%let rc=%sysfunc(fetchobs(&dsid0,&i));
%let varname=%sysfunc(getvarc(&dsid0,1));
proc univariate data =&dsn noprint;
var &varname;
output out =quarter
pctlpre = P_ pctlpts=1 to 99 by 98;
run;
***记录每个变量的四分位数数据;
data quarter;
set quarter;
varname="&varname";
run ;
data &outext;
set &outext quarter;
run;
%end;
%end;
%let rc = %sysfunc(close(&dsid0));
/*计算极值上下限*/
data &outext;
set &outext;
cpmin=P_1;        /*数据计算的下限*/
cpmax=P_99;        /*数据计算的上限*/
run;
/*极值处理:用上下限替换极值. 注意:这里缺失值不进行替换*/
data &outdsn;
set &dsn;
%let dsid1=%sysfunc(open(&outext,in));
%if &dsid1 %then %do;
%do i=1 %to %sysfunc(attrn(&dsid1,Nobs));
%let rc=%sysfunc(fetchobs(&dsid1,&i));
%let varname1=%sysfunc(getvarc(&dsid1,1));
%let cpmin=%sysfunc(getvarn(&dsid1,4));
%let cpmax=%sysfunc(getvarn(&dsid1,5));
%if &varname1 ne ''  %then %do;
if  &varname1 < &cpmin and &varname1 ne . then &varname1=&cpmin; 
  if  &varname1 > &cpmax then &varname1=&cpmax; 
%end;
%end;
%end;
%let rc1 = %sysfunc(close(&dsid1));
run;
%mend outlieradjustbypct;

%yy(dsn=aa,outdsn= cc,outext=dd);

这里只针对异常值对缺失值不做处理。

缺失值这里不做介绍,缺失值处理要集合业务的情况

宽边已经做成,接下来就是分析了 

首次书写就到这吧 下来再来写写






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值