《SAS編程與數據挖掘商業案例》學習筆記之十一
繼續讀書筆記,本文重點側重sas觀測值的操作方面,
1.output語句
註意:簡單的data步不須要output語句。run語句會自己主動輸出pdv中的數據到數據集,並返回data步開頭繼續運行下一條觀測。
在有output語句和run語句同一時候存在時。pdv僅僅會運行output的結果到正在被創建的數據集。而運行run語句的結果是pdv會清空全部的變量值為缺失值
data a;
input id x1-x3;
cards;
101 10 20 30
102 40 50 60
;
data b;
set a;
x=x1;output;
x=x2;output;
x=x3;output;
output;
run;
因為data步包括四個output語句,因此每次讀入一條觀測,程序會運行output語句,總共會輸出8條記錄
data out1 out2;
set sashelp.class;
if _n_ le 7 then output out1;
else output out2;
run;
if條件的output語句,僅僅有滿足if條件時pdv才把得到的結果輸出到正在被創建的數據集
data a;
input x y @@;
cards;
1 10 1 20 1 200 2 30 2 40
3 50 3 60 4 70 3 80 4 400
;
proc sort data=a;by x;run;
data b;
set a;
by x;
retain rt;
if first.x then rt=0;
if last.x then output;
rt=y;
run;
輸出
該例中output與run同一時候出現時,值輸出output後面的,無論output前面的條件是否成立;運行run語句的結果是PDV會清空全部的變量值為缺失。
是對每個by組進行循環的,且first.x也是針對by組的
2.if語句 是一個可運行語句,將滿足條件的觀測值輸出到正在被創建的數據集中
3.where語句
註:不能使用自己主動變量_n_或者其它選項如obs,point與where語句一起使用。由於where語句是在pdv之前
使用where語句必須保證讀入數據集的完整性,不能使用如firstobs=2等不能完整讀入數據集的選項
對同一數據集。同一時候使用where語句和where=選項,則系統僅僅使用where=選項,而不考慮where語句
where語句和by語句一起出現時,先運行where語句,然後在by語句,by組對運行完成後的數據集又一次定義first/last
Where語句和if語句 差別
1.where語句是在觀測進入pdv之前起作用,而if語句是在pdv中的觀測起作用。
2.where語句不是一個可運行語句,而子集if語句是可運行語句
3.where語句有自己特有的表達式,而if語句使用通用的sas表達式
4.where語句比if效率高
4.replace語句和remove語句和output語句
這兩個語句僅僅能跟modify一起使用,
數據集:
libname chapt5 "f:\data_model\book_data\chapt5";
data chapt5.a;
input x y @@;
cards;
1 10 2 20 3 30 4 40
;
run;
libname chapt5 "f:\data_model\book_data\chapt5";
data chapt5.b;
input x y @@;
cards;
3 300 4 400 5 500
;
run;
eg:
data chapt5.a;
modify chapt5.a chapt5.b;
by x;
if _iorc_=0 then replace;
else _error_=0;
run;
對匹配到的數據。更新數據集將覆蓋主數據集,對於未匹配到的數據,不予考慮
data chapt5.a;
modify chapt5.a chapt5.b;
by x;
if _iorc_=0 then replace;
else do; _error_=0;output;end;
run;
對匹配到的數據,更新數據集將覆蓋主數據集,對於未匹配到的數據,將更新數據集數據也輸出到主數據集中
data chapt5.a;
modify chapt5.a chapt5.b;
by x;
if _iorc_=0 then remove;
else _error_=0;
run;
對於匹配到的數據從主數據中刪除
5.delete語句和stop語句
data a;
set sashelp.class;
if sex eq "M" then delete;
run;
刪除部分觀測,下面代碼目的一樣
data a;
set sashelp.class;
if sex ne "M";
run;
data a;
set sashelp.class;
if _n_ ge 3 then stop;
run;
stop直接跳出data。終於數據集a僅僅有兩條觀測
《SAS編程與數據挖掘商業案例》學習筆記之十一