我使用以下代码来分析数据:
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 :(得分:0)
NOTSORTED意味着SAS可以假设数据中的排序顺序是正确的,因此它可能没有明确地通过PROC SORT但它是按照BY语句中列出的逻辑顺序。
BY语句中的所有变量都包含在NOTSORTED选项中。鉴于我怀疑你完全不理解BY组处理。 使用它通常有点危险,特别是如果你不理解BY组处理。如果您的数据位于同一组但不相邻,则它将无法正常工作且不会产生错误。正确的解决方法取决于您的流程是否诚实。
我建议您查看有关BY组处理的文档。它非常深入并且有大量样本来说明不同类型的计算。
NOTSORTED通常用于示例帖子中,以避免排序或使用难以以其他方式实现的自定义排序。显式排序将删除此问题,但是当您使用带有BY语句的SET语句时,您可能也会误解SAS如何处理数据。我相信这叫做交错。
答案 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;
...