Sas 为什么合并的数据集在proc内容中不显示为已排序?

Sas 为什么合并的数据集在proc内容中不显示为已排序?,sas,Sas,如果我这样做: data out.blah ; merge bling zorp ; by mrn ; run ; out.blah不应该显示为在PROC内容中排序吗?我发现情况并非如此。鉴于bling&zorp必须按mrn排序,在什么情况下,合并2个已排序数据集的结果也不会按顺序合并?下面是一个简单的示例,说明为什么最终数据集不会自动设置排序标志 proc contents data=sashelp.class; run; proc sort data=sash

如果我这样做:

data out.blah ;
  merge
    bling
    zorp
  ;
  by mrn ;
run ;

out.blah不应该显示为在PROC内容中排序吗?我发现情况并非如此。鉴于bling&zorp必须按mrn排序,在什么情况下,合并2个已排序数据集的结果也不会按顺序合并?

下面是一个简单的示例,说明为什么最终数据集不会自动设置
排序
标志

proc contents data=sashelp.class;
run;

proc sort data=sashelp.class out=class;
by name;
run;
proc sort data=sashelp.classfit out=classfit;
by name;
run;
data want;
  merge class classfit;
  by name;
  name = reverse(name);
run;
哎呀,不再排序了

当然,您在这里有两个帮助SAS的选项,因为您知道自己没有做过类似的傻事-
SORTEDBY
data set选项和
PRESORTED
proc sort

data want(sortedby=name);
  merge class classfit;
  by name;

run;

proc contents data=want;
run;
现在,宝贵的排序标志已设置,但
已验证
当然未设置

proc sort data=want presorted;
by name;
run;
proc contents data=want;
run;
好了,一切都很好,数据只需快速传递一次,而不是一次过程排序的全部费用

2011年,来自SGF的一篇文章详细介绍了其中的一些内容,包括讨论如何设置排序标志(
PROC SORT
ORDER BY
,但其他内容不多)