一般來說proc sort會用by語句來決定如何排序的方式,但很少有人知道key語句。在語法上key和by是互相替代的語句考阱,兩者功能類似泌射,但也有區(qū)別粘姜。
區(qū)別1:by語句必須逐個變量指定排序是正序還是倒敘,而key語句則整體統(tǒng)一設(shè)置成相同的方式魄幕。
舉例:
proc sort data=sortVar out=sortedOutput;
key x1 x2 / descending;
run;
是等效于:
proc sort data=sortVar out=sortedOutput;
?by descending x1 descending x2 ;
run;
區(qū)別2:by語句中沒有正序的關(guān)鍵詞相艇,因為正序是默認(rèn)的。key語句可以設(shè)定正序纯陨。
舉例:
proc sort data=sortVar out=sortedOutput;
? ? key x1 / ascending;
run;
上面代碼是正確的坛芽,但下面代碼是錯誤的:
proc sort data=sortVar out=sortedOutput;
? ? by ascending x1;
run;
區(qū)別3:由于key必須是整體統(tǒng)一設(shè)定留储,因此key可以多重使用。
舉例:
proc sort data=sortKeys out=sortedOutput;
? ? key x2;
? ? key x3;
run;
排序是按照key出現(xiàn)的順序排變量的咙轩。
盡管by也可以寫多重获讳,但實際上只有最后一個by有效:
proc sort data=sashelp.class out=class;
by sex;
by age;
run;
proc sort data=sashelp.class out=class;
by age;
run;
以上兩段程序等效。
另外活喊,無論是by還是key丐膝,都可以使用簡寫變量的方式,例如:
proc sort data=sortKeys out=sortedOutput;
? ? key x1 x2-x4;
run;