《SAS编程与数据挖掘商业案例》学习笔记之十二

Posted llguanli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《SAS编程与数据挖掘商业案例》学习笔记之十二相关的知识,希望对你有一定的参考价值。

本次重点在:sas数据集管理   

主要包含:包含数据集纵向拼接、转置、排序、比較、复制、重命名、删除等

1.append语句

注:base数据集和data两个数据集必须结构一样。避免使用force的情况,反复append的会造成反复。

一个避免反复的商业化应用:

%macro dl;

%if %sysfunc(exist(null)) ne 0 %then %do;

proc datasets lib=work nolist;

delete null;

quit;

%end;

proc append base=null data=sashelp.class;run;

%mend dl;

%dl;

假设数据集null存在,则进行删除,否则直接append

 

还有一个使用的样例;

data _null_;

x=today();

format x yymmdd10.;

call symput(‘data_month‘,put(intnx("month",x,0),yymmn6.));

run;

%put &data_month;

data a;

input month$ var;

cards;

200908 10

200909 20

200910 30

200911 40

;

data b;

input  month$ var;

cards;

200911 400

;

data a;

modify a;

if month="&data_month" then remove;

run;

proc append base=a data=b;run;

第一部分:获取当前月

第二部分:删除当前月数据

第三部分:append到数据a

当中第二部分能够用下面两个语句替代,可是效率最高的是remove。效率最低的是sql

data a;

set a;

if month="&data_month" then delete;

run;

 

proc sql;

delete from a

where month="&data_month";

quit;

 

2.sort语句

经常使用选项:

nodupkey:删除反复by值相应的观測

noduprecs:删除反复观測值

Descending 一定要放在降序排序的变量前。

Eg:

data a;

input x y @@;

cards;

1 20 1 10 1 30 2 40 2 50

;

run;

proc sort data=a nodupkey; by x;run;

仅仅取排序变量的每个by组的第一条观測值

上述代码也能够用下面取代:

proc sort data=a ; by x;run;

data b;

set a;

by x;

if first.x;

run;

返回每个by组里面y最小的。

proc sort data=a; by x y;run;

proc sort data=a nodupkey; by x;run;

也能够用data步完毕:

proc sort data=a; by x y;run;

data b;

set a;

by x y;

if first.x;

run;

 

注:假设使用了nodupkey选项。最好使用out=选项,否则原有数据集会被删除掉一部分。

对于多个字符变量须要sort的情况下,sort前先用catt之类的字符拼接函数拼接全部须要sort的字符变量。

并最好使用out=选项。

data a;

length cat $100;

input x1$ x2$ x3$ y;

cat=catt(of x1-x3);

cards;

a1 b1 c1 1

a2 b2 c2 2

;

run;

proc sort data=a out=b;

by cat;

run;

下面代码也能够运行,可是效率低

proc sort data=a out=b;

by x1-x3;

run;

 

proc sort data=a ;

by x1-x3;

run;

 

3.转置transpose过程

proc transpose data= chapt6.score out= chapt6.idnumber name=test prefix=sn;

id studentid;

idlabel student;

run;

注:转置的变量为全部的数值型变量,包含test1test2final

对于默认的变量名用studentid取代,并加入前缀sn

对于默认的转之前变量名列转置后的列名_name_改为test

转置后的变量添加student

 

eg

proc transpose data= chapt6.fishdata

   out= chapt6.fishlength(rename=(col1=measurement));

   var length1-length4;

   by location date;

run;

by组中的4个变量length1-length4进行转置。系统每读取一条by观測。转置后将产生4条观測

data chapt6.fishlength2;

set chapt6.fishdata(keep=location date length1-length4);

array tr[1:4] length1-length4;

do i=1 to 4;

measurement=tr(i);

output;

end;

keep location date measurement;

run;

通过data语句实现上面的转置过程

proc transpose data= chapt6.fishlength

   out= chapt6.fishdata2;

   var measurement;

   by location date;

id _name_;

run;

列转成行

data chapt6.fishdata3;

do i=1 to 4;

set chapt6.fishlength(keep=location date measurement);

array tr[1:4] length1-length4;

tr(i)=measurement;

end;

keep location date length1-length4;

run;

通过data步骤实现列转成行

4.datasets过程

sashelp

以上是关于《SAS编程与数据挖掘商业案例》学习笔记之十二的主要内容,如果未能解决你的问题,请参考以下文章

App设计灵感之十二组精美的数据图表展示App设计案例

Android 学习笔记之十 Listview 优化原理

Dubbo学习系列之十二(Quartz任务调度)

Linux学习笔记(三十二)iptables filter表案例 iptables nat表应用

Java基础学习笔记二十二 网络编程

App设计灵感之十二组精美的租车类App设计案例