首次写博客不知该如何写起,随便写点吧
那就说说这几天使用的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);
这里只针对异常值对缺失值不做处理。
缺失值这里不做介绍,缺失值处理要集合业务的情况
宽边已经做成,接下来就是分析了
首次书写就到这吧 下来再来写写