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

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

ror otto -c ace mov 得到 replace 讀書筆記 集中

繼續讀書筆記,本文重點側重sas觀測值的操作方面, 主要包含:輸出觀測值、更新觀測值、刪除觀測值、停止輸出觀測值等

1.output語句 輸出當前在pdv中的觀測值,繼續無條件運行以下的語句。

註意:簡單的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;

輸出

by變量的last觀測值,並保留last近期前一條觀測變量值。

該例中outputrun同一時候出現時,值輸出output後面的,無論output前面的條件是否成立;運行run語句的結果是PDV會清空全部的變量值為缺失。

是對每個by組進行循環的,且first.x也是針對by組的

2.if語句 是一個可運行語句,將滿足條件的觀測值輸出到正在被創建的數據集中

3.where語句 不是一個可運行語句。推斷條件是在pdv之前

註:不能使用自己主動變量_n_或者其它選項如obs,pointwhere語句一起使用。由於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編程與數據挖掘商業案例》學習筆記之十一