0

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

 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;
4

2 回答 2

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;
...
于 2017-05-27T15:48:59.207 回答
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

于 2017-05-27T02:16:16.607 回答