SAS中兩個語句可以完成相同操作,應該如何選擇?
現(xiàn)在有一個記錄聯(lián)系方式的數(shù)據集contact,其中有一條觀測的地址信息(Address)缺失。
現(xiàn)在想把地址缺失的觀測刪除,可以有兩種做法:
(1)使用IF語句和DELETE語句來刪除滿足條件的觀測,其基本形式如下:
IF 條件表達式 THEN DELETE;
在該過程中,SAS首先判斷條件表達式是否為真。如果為真,則執(zhí)行THEN從句中的DELTET語句。DELETE語句會讓SAS立即返回DATA步的開始處讀取下一條觀測,當前觀測不會寫入輸出數(shù)據集中。注意,DELETE語句不會刪除輸入數(shù)據集中的觀測。
data work.contact_address;
set saslib.contact;
if address = "" then delete;
run;
(2)另一種方式是直接選取滿足條件的觀測,即使用取子集的IF語句(Subsetting IF),其基本形式如下:
IF 條件表達式;
當條件表達式的值為真時,繼續(xù)處理該觀測;否則停止處理該觀測并返回DATA步開始處讀取下一條觀測,且該觀測不會寫入輸出數(shù)據集。該IF語句稱為選取子集的IF語句,是因為所產生的輸出數(shù)據集是原始數(shù)據集的子集。
data work.cwork.contact_address;
set saslib.contact;
if address ^= "";
run;
當DELETE語句和取子集的IF語句都可以完成相同的操作時,選擇哪種方式呢?主要依據如下:
由于DELETE語句和取子集的IF語句需要構造的條件表達式不同,因此在編寫程序的時候,通常選擇需要較少比較次數(shù)的條件表達式的語句,因為這會提高程序執(zhí)行效率。
在比較次數(shù)相近時,通常選擇正向的條件表達式,也就是說選擇取子集的IF語句。
當數(shù)據中存在缺失值或可能有拼寫錯誤的數(shù)據值時,使用取子集的IF語句也更容易產生需要的結果。
請前往:http://lygongshang.com/TeacherV2.html?id=166