SAS NOTSORTED等效

时间:2017-05-27 01:39:58

标签: sas wrds-compusat wrds

我使用以下代码来分析数据:

 set taq.cq_&yyyymmdd:;
 by symbol date time NOTSORTED ex;

我正在以天为单位运行代码的数千个数据集。当& yyyymmdd仅指定一个数据集(一天,例如,20130102)时,它可以工作。但是,当我尝试为多个数据集(例如,201301 :)运行它时,SAS会返回以下错误:

BY NOTSORTED/NOBYSORTED cannot be used with SET statement when
more than one data set is specified. 

如果我不能在这里使用NOTSORTED,我可以使用的是什么等效声明?

我对关键字NOTSORTED的理解是,在数据尚未排序时使用它。因此,我需要先排序吗?怎么做?

我也对NOTSORTED引用的变量数量感到困惑。它只对“时间”产生影响,还是对“符号,数据,时间”产生影响?

非常感谢!

更新#2:

紧跟set语句后的其余过程是:(伪代码,因为我没有发布原始代码的权限)

Data _quotes;

SET STATEMENT HERE 

Change the name of a variable in the dataset (Variable name is EXN). 

last.EXN in a if statement. If the condition is satisfied, label EXN. 

Drop some variables. 

Run; 

DATA NEWDATASET (sortedby= SYMBOL DATE TIME index=(SYMBOL)
              label="WRDS-TAQ NBBO Data");

SET _quotes;
by symbol date time;

.... 

Run;

2 个答案:

答案 0 :(得分:0)

NOTSORTED意味着SAS可以假设数据中的排序顺序是正确的,因此它可能没有明确地通过PROC SORT但它是按照BY语句中列出的逻辑顺序。

BY语句中的所有变量都包含在NOTSORTED选项中。鉴于我怀疑你完全不理解BY组处理。 使用它通常有点危险,特别是如果你不理解BY组处理。如果您的数据位于同一组但不相邻,则它将无法正常工作且不会产生错误。正确的解决方法取决于您的流程是否诚实。

我建议您查看有关BY组处理的文档。它非常深入并且有大量样本来说明不同类型的计算。

http://support.sas.com/documentation/cdl/en/lrcon/69852/HTML/default/viewer.htm#n138da4gme3zb7n1nifpfhqv7clq.htm

NOTSORTED通常用于示例帖子中,以避免排序或使用难以以其他方式实现的自定义排序。显式排序将删除此问题,但是当您使用带有BY语句的SET语句时,您可能也会误解SAS如何处理数据。我相信这叫做交错。

http://support.sas.com/documentation/cdl/en/lrcon/69852/HTML/default/viewer.htm#n1tgk0uanvisvon1r26lc036k0w7.htm

答案 1 :(得分:0)

我怀疑NOTSORTED关键字正在用于查找具有相同符号,日期,时间内EX变量的相同值的观察组。如果您只需要找到FIRST,那么您可以使用LAG()函数来计算FIRST.EX标志。

data want;
  set taq.cq_&yyyymmdd:;
  by symbol date time;
  first_ex = first.time or ex ne lag(ex);

否则,您可能希望将流程转换为数据步骤视图,然后将视图设置在一起。

data work.view_cq_20130102 / view=work.view_cq_20130102;
  set taq.cq_20130102;
  by symbol date time ex NOTSORTED;
  ...
run;
...
data want ;
  set work.view_cq_201301: ;
  by symbol date time;
...