SAS編程技巧(二)
經(jīng)過(guò)一段時(shí)間的積累,今天又有一些工作中遇到的問(wèn)題分享給大家,有些內(nèi)容可能理解的不夠透徹,如有不對(duì)的地方還請(qǐng)大家指正。
1、使用數(shù)據(jù)集選項(xiàng)的時(shí)候是否加括號(hào)
我們新建數(shù)據(jù)集的時(shí)候往往需要把一個(gè)或多個(gè)數(shù)據(jù)集SET進(jìn)來(lái),這個(gè)時(shí)候我們會(huì)用數(shù)據(jù)選項(xiàng)KEEP=、DROP=......對(duì)數(shù)據(jù)集進(jìn)行篩選。當(dāng)要?jiǎng)h除多個(gè)變量的時(shí)候,很多人會(huì)習(xí)慣性的給多個(gè)變量加上括號(hào),如下面的錯(cuò)誤示例:
data class1;
set sashelp.class(where=(age>15) drop=(name sex));
run;
是否加括號(hào)取決于數(shù)據(jù)集選項(xiàng)是否要加判斷或者對(duì)變量進(jìn)行操作,比如where=和rename=就需要加括號(hào),drop=和keep=就不需要加括號(hào)。
正確代碼如下:
data class1;
set sashelp.class(where=(age>15) drop=name sex);
run;
2、compress函數(shù)不能用于刪除單詞
在做一個(gè)項(xiàng)目的時(shí)候需要?jiǎng)h除變量中的'one'這個(gè)單詞,首先想到的就是用compress(var,'one')來(lái)解決,在最后QC的時(shí)候發(fā)現(xiàn)多刪了個(gè)字母‘e’,原來(lái)compress是把字符串中的‘o’、‘n’、‘e’都刪除了,而不是按單詞來(lái)刪除。這個(gè)時(shí)候可以用tranwrd把整個(gè)單詞替換為空,tranwrd(var,'one','');
3、SAS將兩個(gè)連續(xù)的引號(hào)作為一個(gè)引號(hào)
例如,要表示字符串Tom's,則使用下面的形式:
if name='Tom''s' then do;
要表示Tom“s,可以使用以下形式:
if name="Tom""s" then do;
4、謹(jǐn)慎使用if else
在一次QC的過(guò)程中,發(fā)現(xiàn)我的數(shù)據(jù)集比D側(cè)的少一條,代碼邏輯是:
if index(var,'1') then output;
else if index(var,'2') then output;
其中有個(gè)原始數(shù)據(jù)是var=“1&2”,if else在滿足一個(gè)條件以后就不執(zhí)行后面的程序了,所以會(huì)少數(shù)據(jù)。