SAS中是否有固有的方法来查找数据集的排序顺序?

有帮助吗?

解决方案

正如Sassy所说,SAS知道数据集是否排序的唯一方法是它是否进行了排序,或者是否明确告诉它排序顺序。如果您尚未执行上述任一步骤,则无法确定数据是否为任何类型的订单。

我喜欢AFHood只想尝试排序的想法。如果SAS知道它按照这种方式排序,它只会告诉你,不会再这样做。

NOTE: Input data set is already sorted, no sorting done

以下是调查数据排序的其他一些想法......享受。

如果您只想手动查看,可以使用proc contents data = libname.data; run;并查看输出。有一个名为sorted的属性。如果您使用的是窗口模式,则可以右键单击资源管理器中的数据集并选择属性,然后单击详细信息选项卡并查看已排序的值。

对于程序化测试方法,您可以使用proc内容中的输出数据集。 sorted和sortedby列将告诉您数据集是否已排序以及排序的变量。通过运行以下代码来尝试它。

/* In an unsorted data set, proc contents will give missing values
   for the sorted and sortedby columns of its output data */
proc contents data=sashelp.class out=class_contents noprint;run;
proc print data=class_contents;
  var memname name sorted sortedby;
run;

/* Now sort and observe the changes in the sorted and sortedby columns */
proc sort data=sashelp.class out=class_sorted; by name;run;
proc contents data=class_sorted out=class_sorted_contents;run;
proc print data=class_sorted_contents;
  var memname name sorted sortedby;
run;`enter code here`

其他提示

如果数据确实已被“排序”,则是。在proc内容产生的输出底部有一个关于排序信息的小表。

使用已经采用某种排序顺序的数据构建的数据集可能没有附加此信息,您需要开始探索数据以确定其顺序。

您可以使用 Attrc 功能。

http://support.sas上的文档.com / onlinedoc / 913 / getDoc / en / lrdict.hlp / a000147794.htm

它类似于以下

data _null_;
   dsid=open("work.a","i");
   sortby=attrc(dsid,"SORTEDBY");
   put  sortby=;
   rc=close(dsid);
run;

我假设您正在解决的问题是尝试确定数据集是否需要以编程方式进行排序。我们使用的最佳解决方案是在有疑问时简单地使用proc排序。

当然你可能会说,这是开销和处理..是的,但是如果数据集已经正确排序,请在知道它的情况下进行排序,让代码继续进行,只需要很少的处理。它具有“如果排序然后继续前进”。逻辑内置。

如果这不是您要解决的问题,请详细说明,我们会看看是否可以提供帮助。

如果sas没有对数据进行排序,但您认为它可能已经排序,您可以尝试对其进行处理,就好像它已经排序并处理可能会或可能不会发生的错误一样。

* This works, swap some values to see how an error looks;
data foo;
input height;
cards;
1
2
3
4
;
run;

data _null_;
set foo;
by height;
run;

可以在宏中检测并重置错误状态,但这种方法可能会变得混乱。有关该此处的更多信息

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top