《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
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;
注:转置的变量为全部的数值型变量,包含test1、test2、final
对于默认的变量名用studentid取代,并加入前缀sn
对于默认的转之前变量名列转置后的列名_name_改为test,
转置后的变量添加student值
eg:
proc transpose data= chapt6.fishdata
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
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编程与数据挖掘商业案例》学习笔记之十二的主要内容,如果未能解决你的问题,请参考以下文章