SAS學習筆記9

1.SET
SET語句從一個或多個SAS數據集中讀取觀測值並實現縱向合併。每個SET語句被執行時,SAS就會讀一個觀測到PDV中。一個DATA步能夠有多個SET語句,每一個SET語句又能夠跟多個SAS數據集。多個SET語句含有多個數據指針,多個SET語句被執行時,SAS會按照自動變量_N_合併每一個SET語句後面全部數據集的觀測到一個PDV中。
<1>IN=選項。
 IN選項,當讀入多個SAS數據集時,用IN選項可肯定本觀測來自哪一個數據集;
  variable=0表示觀測不是來自本數據集
  variable=1表示觀測是來自本數據集
例子:
data one;
input x y $ @@;
cards;
1 a 2 b 3 c 
;
data two;
input x z $ @@;
cards;
4 d 5 e
;
data in1;
set one(in=ina) two(in=inb);
in_one=ina;/*此處我本身的理解是這樣的:前一行括號中的ina是本身定義的一個標識,表示對應的觀測值在不在數據集中*/
in_two=inb;/*此時將ina和inb賦值給in_one和in_two並在數據集in1中顯示*/
run;
數據集in1結果以下:
x     y      z      in_one       in_two
1     a               1            0
2     b               1            0
3     c               1            0
4            d        0            1
5            e        0            1
IN=是一個很是重要的SAS數據集選項,它能夠把SET語句後面不一樣的數據集經過標識變量顯示出來。可是因爲IN自己不是變量,所以不能直接經過賦值語句如in_one=in 獲得標識變量,而只能先在PDV裏面建立一個臨時變量(該例是ina和inb),而後把臨時變量的值賦給輸出變量(該例對應的是in_one和in_two)。固然,不必定非要建立輸出變量。如:

data in2;
set one(in=ina) two(in=inb);
if ina=1;then flag=1;else flag=0;
run;




數據集in2的結果以下:
x    y    z     flag
1    a            1
2    b            1
3    c            1
4         d       0
5         e       0




IN=選項的做用在於經過標識輸入數據集,達到對不一樣輸入數據集執行不一樣條件操做的目的。 java

<2>固然SET語句的選項還有好多,例如常常用到的選項是KEEP=,RENAME=,WHERE=,FIRSTOBS=,OBS=,NOBS=,POINT=,END=選項,可是這些都不是很難理解,只有上邊的IN=選項費了我一點時間,我將個人理解和例子寫上去了,但願能夠幫助到你。下邊簡單介紹一下後邊的幾個選項應用: 數組

KEEP=:指定的變量(組)進入到PDV,即最終數據集中保存下來的數據。 函數

RENAME=:重命名選項,知識須要對重命名變量用括號括起來。 spa

WHERE=:和SQL的where同樣,條件篩選語句,只是要對錶達式用括號括起來。 指針

FIRSTOBS=:讀取數據集中的觀測值開始位置。如:FIRSTOBS=3說明讀取數據集的第三條觀測做爲開始觀測。 code

OBS=:指定讀取數據集中的觀測值的結束位置。同上。 排序

NOBS=:對應的是數據集的觀測數,即數據集中數據的總條數。 索引

POINT=:取指定的一條數據。(注意SAS中數組或者數據,開始的第一條是1而不是0)。 開發

END=:標識文件是都結尾。一般這樣用:end=last_obs; input

2.BY

BY語句在過程當中通常用來指定一個或幾個分組變量,根據這些分組變量值把觀測分組,而後 對每一組觀測分別進行本過程指定的分析。在使用帶有BY語句的過程步以前通常先用SORT過 程對數據集排序。

3.MERGE
merge語句能夠實現多表的橫向合併。從功能實現的角度,若是是一對1、多對一或一對多的關聯,merge語句和SQL基本上是同樣的。可是對於多對多的關聯,二者有很大的差異。在實際操做中,多對多的狀況是須要用SQL實現的。
注意:
【1】對須要用到BY語句的merge,merge後面全部表在merge以前都須要排序。
【2】相對於SET語句,IN=選項在merge語句中應用更普遍。
【3】BY語句後面的變量必須是merge語句後面全部數據集共同變量,因此有時候須要對錶中的變量重命名。
【4】在匹配合並中,若是merge後一個數據集出現空值,則空值也會覆蓋前一個表的值。

4.KEEP
KEEP=選項保證在讀入數據集時只有KEEP=後面的變量進入PDV,而數據集其餘全部變量將不會進入PDV。
例子:
data a1;                                                          data a2;
set sashelp.class(keep=_character_);                           set sashelp.class(keep=_numeric_);
run;                                                              run;
此程序將保留數據集class全部字符型變量。                           此程序將保留數據集class全部數值型變量。


還能夠用下邊的形式,來建立多個數據集,保留不一樣的變量:
data a3(keep=name) a4(keep=weight);
set sashelp.class;
...;
run;
此程序通過DATA步一系列操做以後,輸出兩個數據集:a3只有name變量;a4只有weight變量。

5.DROP
DROP語句是KEEP語句的反向聲明語句,規定輸出數據集中要刪除的變量,同KEEP同樣,對DATA步中正在建立的全部SAS數據集都適用。
DROP語句有以下兩個重要的功能:
<1>讀入數據集用DROP=選項效率高於DROP語句。
<2>既能夠刪除變量列表,也能夠在輸出數據集中刪除不一樣變量。

6.SORT
SORT對數據集中的觀測排序。對數據集進行合併和更新等在使用前必須通過對BY變量進行排序。
<1>經常使用選項說明:
DATA=:規定被排序的數據集,默認爲最新建立的數據集。
OUT=:建立輸出數據集,省略該選項時用排序後的數據集替換原數據。
EQUALS;保持BY組內的排序。
NOEQUALS:容許BY組內順序變化。
NODUPKEY:刪除重複BY值對應的觀測。
NODUPRECS:刪除重複觀測值。
FORCE:刪除實施多餘排序。排序並替換原來加索引或取子集的數據集;在沒有規定OUT=選項時,在下列狀況下應該使用FORCE選項:數據集有索引、使用了OBS=        和FIRSTOBS=選項、使用DATA=規定被排序數據集時使用了WHERE選項、PROC SORT中使用了WHERE選項。
BY:PROC SORT中必須使用BY語句,BY語句中能夠指定一個或多個變量。默認時升序排序。可使用DESCENDING對變量進行降序排序,可是要注意DESCENDING必定
   要放在降序變量以前。
<2>在商業實踐中,最經常使用的就是兩個選項。OUT和NODUPKEY。注意幾點:
【1】若是使用了NODUPKEY選項,最好使用OUT=選項。不然原有數據集會被 SORT後NODUPKEY刪除掉一部分觀測,萬一程序開發有誤,又要從新生成原來的數據集。而使用OUT=選項能夠保證原來的數據集不變,把NODUPKEY後產生的觀測輸出到新的數據集中。
【2】若是有多個字符型變量須要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;
7.SUMMARY PROC SUMMARY = PROC MEANS;
相關文章
相關標籤/搜索