一双霍、option center
所有的輸出表格可以用option center;或option nocenter;控制,如果是center挪钓,則輸出結(jié)果居中是越,否則靠左。
option center;效果
option nocenter;效果
二碌上、有關(guān)文字編碼的冷知識
1倚评、unicode和unicodec函數(shù)可以用來解碼
2、btye
3馏予、可以獲取文字中的中文天梧,compress(compress(s,,'n'),,'kl')。其中“l(fā)”意思是小寫字母和中文霞丧,“n”表示大小寫的英文字母和下劃線呢岗。
三、關(guān)于proc report
define中的group蛹尝,一定要配合聚合的統(tǒng)計量使用后豫。如果沒有會出一段黑字。我們可以用order替換掉group就不會有這個問題了突那。
四挫酿、Hash連表選取所有變量
一般來講,hash方法在data步中愕难,變量是無法在編譯階段識別的早龟。所以必須在代碼中讓相關(guān)變量出現(xiàn)在代碼中,以及確定變量長度猫缭。如下例:
length QNAM QVAL $200.;
if _n_=1 then do;
declare hash dvh(dataset:'XX');
dvh.definekey('SUBJID');
dvh.definedata('QNAM','QVAL');
dvh.definedone();
call missing(QVAL,QNAM);
end;
但是葱弟,有的時候一個一個的選入變量會比較痛苦,于是有了如下辦法:
if _n_=1 then do;
if 0 then set XX;
declare hash dvh(dataset:'XX');
dvh.definekey('SUBJID');
dvh.definedata(all:'y');
dvh.definedone();
end;
先在代碼中使用set語句猜丹,從而直接確定選入的變量名和長度翘悉,然后通過一個虛假的if語句,使得set語句在事實上不可能執(zhí)行居触。這樣就省掉了確定變量及其長的length語句妖混,和防止NOTE的call missing老赤。這樣做的好處是不必一個一個的去設(shè)定變量,壞處是:
1制市、被set的數(shù)據(jù)集中所有的變量都會被導(dǎo)入到data步中抬旺,有時可能會發(fā)生意想不到的覆蓋或bug。
2祥楣、這樣做連接進(jìn)入的變量是retain的开财。
五、array語句可以定義臨時數(shù)組_TEMPORARY_误褪。無論是臨時的還是定義好的责鳍,只要在array語句規(guī)定變量值,那么他是retain的兽间,但如果不規(guī)定历葛,即使是新建變量也不是retain的。array語句是在PDV階段前執(zhí)行的嘀略。
六恤溶、當(dāng)是用put進(jìn)行字符到字符的轉(zhuǎn)換時,輸入變量類型錯誤是會導(dǎo)致報錯的帜羊。
七咒程、當(dāng)兩個數(shù)據(jù)集set到一起的時候,相同名字的變量可能長度不同讼育,這會導(dǎo)致后面的數(shù)據(jù)截斷帐姻。尤其是兩個數(shù)據(jù)集是excel導(dǎo)入的時候要注意。
八奶段、比較符號=:
該符號可以比較其中一個比另一個長卖宠,而且前半部分相等的字符串。例如:a=‘1234’忧饭,b=‘12345’。此時a=b是不成立的筷畦,但是a=:b是成立的词裤。
九、dosubl函數(shù)
可以直接執(zhí)行SAS的代碼鳖宾,它不是放在宏編譯器里執(zhí)行宏語句吼砂,而是直接中斷當(dāng)前的程序,先講代碼作為普通程序執(zhí)行鼎文。個人理解是中斷當(dāng)前的程序渔肩,另外開一個input stacker單跑普通程序。
宏里的示例:
%let rc = %sysfunc(dosubl(proc print data=sashelp.class;run;));
具體情況有待研究拇惋。周偎。抹剩。。