1. 程式人生 > >《SAS編程與數據挖掘商業案例》學習筆記之十二

《SAS編程與數據挖掘商業案例》學習筆記之十二

style rename today 降序排序 cat list append span nod

本次重點在: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編程與數據挖掘商業案例》學習筆記之十二