一般来说proc sort会用by语句来决定如何排序的方式,但很少有人知道key语句。在语法上key和by是互相替代的语句,两者功能类似,但也有区别。
区别1:by语句必须逐个变量指定排序是正序还是倒叙,而key语句则整体统一设置成相同的方式。
举例:
proc sort data=sortVar out=sortedOutput;
key x1 x2 / descending;
run;
是等效于:
proc sort data=sortVar out=sortedOutput;
by descending x1 descending x2 ;
run;
区别2:by语句中没有正序的关键词,因为正序是默认的。key语句可以设定正序。
举例:
proc sort data=sortVar out=sortedOutput;
key x1 / ascending;
run;
上面代码是正确的,但下面代码是错误的:
proc sort data=sortVar out=sortedOutput;
by ascending x1;
run;
区别3:由于key必须是整体统一设定,因此key可以多重使用。
举例:
proc sort data=sortKeys out=sortedOutput;
key x2;
key x3;
run;
排序是按照key出现的顺序排变量的。
尽管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;
网友评论