SAS 未分类等效项
SAS NOTSORTED Equivalent
我使用以下代码来分析数据:
set taq.cq_&yyyymmdd:;
by symbol date time NOTSORTED ex;
我正在 运行以天为单位编写代码的数据集数以千计。当 &yyyymmdd 只指定一个数据集(一天。例如,20130102)时,它有效。但是,当我尝试 运行 它用于多个数据集(例如,201301:)时,SAS returns 出现以下错误:
BY NOTSORTED/NOBYSORTED cannot be used with SET statement when
more than one data set is specified.
如果我不能在这里使用 NOTSORTED,我可以使用什么等效语句?
我对关键字NOTSORTED的理解是当数据还没有排序的时候使用它。因此,我需要先对它进行排序吗?怎么做?
我也对 NOTSORTED 引用的变量数量感到困惑。它只对 "time" 有影响,还是对 "symbol, data, time" 有影响?
非常感谢!
更新#2:
set 语句之后的其余过程是:(伪代码,因为我没有 post 原始代码的权限)
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;
NOTSORTED 意味着 SAS 可以假定数据中的排序顺序是正确的,因此它可能没有明确经过 PROC SORT,但它是按 BY 语句中列出的逻辑顺序排列的。
BY语句中的所有变量都包含在NOTSORTED选项中。鉴于我怀疑您完全不了解 BY 组处理。
它通常使用起来有点危险,尤其是如果你不了解 BY 组处理。如果您的数据在同一组中但不相邻,它将无法正常工作并且不会产生错误。老实说,正确的解决方法取决于您的流程。
我建议查看有关 BY 组处理的文档。它非常深入并且有很多示例来说明不同类型的计算。
NOTSORTED 通常在示例帖子中使用,以避免排序或使用难以通过其他方式实现的自定义排序。显式排序将消除此问题,但您可能还误解了当您使用 SET 语句和 BY 语句时 SAS 处理数据的方式。我相信这称为交错。
我怀疑 NOTSORTED 关键字用于查找在相同符号、日期、时间内具有相同 EX 变量值的观察组。如果你只需要找到第一个那么你可以使用 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;
...
我使用以下代码来分析数据:
set taq.cq_&yyyymmdd:;
by symbol date time NOTSORTED ex;
我正在 运行以天为单位编写代码的数据集数以千计。当 &yyyymmdd 只指定一个数据集(一天。例如,20130102)时,它有效。但是,当我尝试 运行 它用于多个数据集(例如,201301:)时,SAS returns 出现以下错误:
BY NOTSORTED/NOBYSORTED cannot be used with SET statement when
more than one data set is specified.
如果我不能在这里使用 NOTSORTED,我可以使用什么等效语句?
我对关键字NOTSORTED的理解是当数据还没有排序的时候使用它。因此,我需要先对它进行排序吗?怎么做?
我也对 NOTSORTED 引用的变量数量感到困惑。它只对 "time" 有影响,还是对 "symbol, data, time" 有影响?
非常感谢!
更新#2:
set 语句之后的其余过程是:(伪代码,因为我没有 post 原始代码的权限)
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;
NOTSORTED 意味着 SAS 可以假定数据中的排序顺序是正确的,因此它可能没有明确经过 PROC SORT,但它是按 BY 语句中列出的逻辑顺序排列的。
BY语句中的所有变量都包含在NOTSORTED选项中。鉴于我怀疑您完全不了解 BY 组处理。 它通常使用起来有点危险,尤其是如果你不了解 BY 组处理。如果您的数据在同一组中但不相邻,它将无法正常工作并且不会产生错误。老实说,正确的解决方法取决于您的流程。
我建议查看有关 BY 组处理的文档。它非常深入并且有很多示例来说明不同类型的计算。
NOTSORTED 通常在示例帖子中使用,以避免排序或使用难以通过其他方式实现的自定义排序。显式排序将消除此问题,但您可能还误解了当您使用 SET 语句和 BY 语句时 SAS 处理数据的方式。我相信这称为交错。
我怀疑 NOTSORTED 关键字用于查找在相同符号、日期、时间内具有相同 EX 变量值的观察组。如果你只需要找到第一个那么你可以使用 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;
...