很多人在處理資料的時候會有一個需求,就是希望同一欄位的值會等於上一個CASE的值。 例如這樣一筆資料 Obs ID year 1 A 2001 2 . 2002 3 . 2003 4 . 2004 5 B 1993 6 . 1994 7 . 1995 8 C 1996 9 . 1997 10 . 1998 11 . 1999 12 . 2000
- 3月 12 週五 201021:05
好用的「同上」--RETAIN指令
- 11月 18 週二 200814:29
合併檔案-Set and Merge
在處理資料的時候,常常需要合併不同資料檔。例如使用社會變遷資料庫時,社會變遷資料庫是一年做一次,需要跨年度比較的時候就會需要把兩個年度的資料合併。這時候就需要使用合併檔案的指令-set和merge。
set和merge都屬於data step,要在data step中才能運作。set和merge的差別在於,set是垂直合併檔案,增加case數量;而merge是水平連結,增加變項數量。
畫個圖給大家看就很清楚了。
我們先產生適用於SET的兩筆資料
- 10月 14 週二 200814:42
libname
libname 是SAS中獨特的目錄概念。 SAS的目錄概念是承繼傳統IBM主機,並非現在流行的Micro$oft 架構。 現行我們不管用XP、VISTA、或是其他在這之下的應用程式,要讀取或是記錄檔案, 都是直接去硬碟目錄去找。例如我要開個EXCEL檔,就直接去C:\temp\讀取temp.exl 這個檔案。存檔也是,我要先點點點,先點到C:\ 找到TEMP這個檔案,點進去儲存。
而SAS使用libname的概念來指定目錄,以libname來建立資料夾存取檔案。 假使我使用libname指定C:\temp這個目錄,將其重新命名為TEMP,成為SAS的目錄。 那我要存取檔案的時候,只需要在檔案前面加上"TEMP."就能讀取C:\TEMP中的SAS資料。 或是將我現行的檔案存到C:\temp中,不用在以點擊的方式來存取檔案。
以下是操作實例:
libname Temp 'C:\temp'; /*將C:\temp設定為sas目錄TEMP*/
data new; /*創造一個新的檔案名為new*/
set TEMP.qoo; /*讀取TEMP資料夾中,名為QOO的SAS檔案
(SAS檔案的副檔名為sas7BDAT)*/
run;
這樣就是讀取檔案了,將TEMP資料夾中的sas檔案qoo 複製到現行的檔案new中。 那要存檔的時候呢,也很方便,只要在現行檔案前加上資料夾名稱就好了。
data TEMP.old; /*創造一個名為old的sas資料檔,
該檔案要存在TEMP資料夾中*/
set new; /*將資料檔new複製過來*/
run;
這樣子就好囉,有沒有很方便呢~
而SAS使用libname的概念來指定目錄,以libname來建立資料夾存取檔案。 假使我使用libname指定C:\temp這個目錄,將其重新命名為TEMP,成為SAS的目錄。 那我要存取檔案的時候,只需要在檔案前面加上"TEMP."就能讀取C:\TEMP中的SAS資料。 或是將我現行的檔案存到C:\temp中,不用在以點擊的方式來存取檔案。
以下是操作實例:
libname Temp 'C:\temp'; /*將C:\temp設定為sas目錄TEMP*/
data new; /*創造一個新的檔案名為new*/
set TEMP.qoo; /*讀取TEMP資料夾中,名為QOO的SAS檔案
(SAS檔案的副檔名為sas7BDAT)*/
run;
這樣就是讀取檔案了,將TEMP資料夾中的sas檔案qoo 複製到現行的檔案new中。 那要存檔的時候呢,也很方便,只要在現行檔案前加上資料夾名稱就好了。
data TEMP.old; /*創造一個名為old的sas資料檔,
該檔案要存在TEMP資料夾中*/
set new; /*將資料檔new複製過來*/
run;
這樣子就好囉,有沒有很方便呢~
1