20170929 星期五
(0) 基本概念
SAS程式是由DATA Step和PROC Step兩部份所組成。
SAS資料集之建立 例1
00001 DATA A;
00002 INPUT NAME $ 1-7 MATH 9-11;
00003 CARDS;
00004 GERGO 83
00005 ALERN 95
00006 CARMEL 63
00007 PROC PRINT;
00008 RUN;
例1中,第一行到 第三行稱為資料段,以DATA開頭,以CARDS 結束。
第一行告訴SAS:我們要建立一個資料集A,這個資料集可以是任何你想要取的名稱。
第二行是一個 INPUT敘述,告訴SAS第一個變數是NAME ,位於資料卡的第一欄到 第七欄,其中的$表示NAME是文字變數,第二個變數MATH位於資 料卡的9-11欄,是數字變數。
第三行之CARDS敘述表示資料步驟的敘述句到此結束,下面是資料的開始;
因此第4-6行即為資料,
第7 行是一個SAS程序步驟(PROC step),指示SAS去列印上述資料.印出最近一次使用到的data set,如要指定用 DATA=資料集名稱 指定要印出哪個資料集
範例2:
data test;
infile cards dlm=',@';
input accno acname $ balancce;
cards;
200000,Sara,20000
456000@Lisa@39000
;
proc print data=test; /* 螢幕輸出
data EGHOME.test1; /* 儲存在永久檔
set test;
run;
範例3:
libname lib名稱 '資料夾路徑';
data lib名稱.新sas7bdat檔名;
set lib名稱.原sas7bdat檔名
新變項一 = 原變項一 + 原變項二;
新變項二 = 原變項一 - 數字;
新變項三 = 原變項一 * 原變項二;
新變項四 = 原變項一 / 數字;
proc print data=lib名稱.新sas7bdat檔名;
var id 新變項一 新變項二 新變項三 新變項四;
run;
(1) SAS 永久檔(SAS Data Library):
SAS 永久資料檔為「兩階段命名」,所謂兩階段是指所有SAS永久資料檔都是由「Library 名稱」和「SAS 檔案名稱」組成,正式永久資料檔 的寫法應為「Library 名稱 . SAS 檔案名稱」,而所謂「Library 名稱」是資料夾的暱稱(nickname)或標籤(label),當沒設定 「Library」時,SAS 會自動將資料儲存於「WORK」的 Library,反之,若有設定 Library,SAS 會以永久檔的形式存在設定的「LIBNAME」所宣告的 Library(即資 料夾)中。
「LIBNAME」為宣告我們 要設定一個新的 Library,接下來的「mylib」為 Library 的名稱,然後再宣告這個 Library 在本機電腦的路徑,記得要使用引號將路徑包裹起來。
LIBNAME mylib "E:\SASNote\epaper\";
DATA mylib.esrd_data_082222;
SET esrd_02;
RUN;
註: 在「DATA set」中有兩個指令可以完成部份工作, 分別為「WHERE」和「IF」指令。
執行步驟:
(1.1).首先在 SAS 目錄下建立您自己的 Library 子目錄。 C:\SAS>WuLib
(1.2).進入 SAS 系統。
(1.3).以 LIBNAME 指令建立 Library reference。
LIBNAME WULIB 'C:\SAS\WuLib';
DATA WULIB.BODY;
INFILE 'C:\DATA\BODY.DAT';
INPUT W1 W2;
CARDS;
(1.4).執行以上程式後,可在 C:\SAS\WuLib 目錄下看到 BODY. sas7bdat 的 SAS data set。
範例:暫存檔
LIBNAME st 'C:\SAS\WuLib';
DATA aaa;
SET st.TYPE;
RUN;
永久檔
LIBNAME st 'C:\SAS\WuLib';
DATA st.aaa;
SET aa;
RUN;
(2)SET 敘述句
1.將資料集A的部份資料,複製到新的資料集B
data newname;
set oldname;
1.1.複製現存資料集中,部份變數
data newname;
set oldname;
keep (drop) 變數名;
1.2.複製現存資料集中,部份觀察值
data newname;
set oldname;
if … then delete;
2.以資料集A的資料產生新變數到新的資料集B
data newname;
set oldname;
new_var_name=經過運算元處理的舊變數;
3.將數個資料集縱向連結至一個新的資料集
data newname;
set oldname1 oldname2 oldname3 oldname4;
(3)資料輸入格式
(2.1)資料的輸入是以 INPUT 關鍵字開始,讀入哪些變數,各個變數的觀 測值在資料檔的位置等等
(2.1.1) 欄位輸入法(Column input)
此法輸入最省空間,有 missing values 也最容易看出,但所有資料必 需案所指定的格式排列整齊。
(2.2.1)行輸入(column input) 例1 即為行輸入,其方式是在變數名稱後指定其 所在欄位,如果是文字變數,則在變數名稱與欄位間加"$"來區別。
(2.2.2)列舉輸入(list input) 例2 為列舉輸入,此種方式僅要列出所有變數名稱,而文字變 數則只在變數名稱後加"$" 區別即可,但此種輸入方式必須注意 的是在資料卡上,每個變數值之間一定要以一 個或以上的空欄隔開,而且每個觀察值一定要依變數名稱排列之次序排列之。
DATA CLASS1;
INPUT NAME $ MATH;
(2.2.3)格式輸入(formatted input) 例3 為格式輸入,此種方式要以特定格式來指示 各變數值所在 的位置,可用的格式如下:
w. 表數字變數的長度為w
w.d 表數字變數的長度為w而其中小數佔d位
$w. 表文字變數的長度為w
@n 移動到第n個欄位 +n 移動n位
DATA CLASS2;
INPUT NAME $7. MATH 4.;
第二行表示第一個變數之名稱為NAME,為文字變數佔7 個欄位,第二個變數名稱為MATH,是數字變數佔4個欄位。
(2.2)INFILE 若欲輸入之資料不是列在資料步驟之下,而是存放在 SAS 系統以外的軟 碟或硬碟中,需用此句來指定。
(4)資料集輸出並列印在OUTPUT
PRINT的選擇項:【DATA=】宣告要印出的資料集
【ROUND】宣告取整數值
【NOOBS】宣告觀察體號碼不印出
【UNIFORM】宣告所有頁面均以同一格式印出
PRINT的關鍵字:【VAR】宣告要印出的變項
【BY】宣告以特定變數分開列印
DATA CASE;
INFILE 'C:\D001.txt' missover;
INPUT ID $ 1-4 Gend 5 age 6-7 Mar 8 Height 9-14 .1;
MISSING 999;
PROC PRINT DATA=CASE ROUND NOOBS UNIFORM;
TITLE '標題' ;
VAR ID age;
BY ID;
RUN;