2017-05-27 120 views
0

分析数据:SAS NOTSORTED我用下面的代码等效

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; 
+0

你的数据集有多大? – Reeza

+0

每个数据集30千兆字节。总共有大约82500个数据集。但作为测试,我现在只运行30个数据集。 @Reeza –

+0

排序肯定会受到限制。您需要解释其余的流程来建议替代方案。请注意我的答案的最后一部分,并且这可能会交错数据集而不会追加它们。 – Reeza

回答

0

NOTSORTED手段(如我没有张贴原始代码许可伪代码) SAS可以假定数据中的排序顺序是正确的,所以它可能没有明确地经过PROC SORT,但它按照BY语句中列出的逻辑顺序。

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

我会建议阅读关于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

+0

如果我放弃NOTSORTED语句,是否将按关键字排序?这实际上是别人写的代码,我只是试图在多个数据集上实现它。 –

+0

当我删除NOTSORTED语句时,错误变为“错误:BY变量未正确排序在数据集TAQ.CQ_20130102上。” –

+0

我的理解是,可能变量是分组的,但没有排序。但是NOSORTED语句似乎不适用于多个数据集。所以我不知道我应该在这里做什么... –

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; 
... 
+0

但是,我必须将不同的数据集作为视图进行硬编码吗?其中有成千上万... –

+0

此外,如果我放弃NOTSORTED语句错误将成为“错误:BY变量未正确排序数据集” –

+0

如果单个数据集没有按SYMBOL DATE TIME那么如果您需要寻求最佳解决方案的帮助,则需要更好地解释整个过程。另外为什么你有成千上万的个人SAS数据集? – Tom