SAS:数据步骤视图 - >错误:变量未正确排序

时间:2018-04-29 18:34:48

标签: sorting sas dataview datastep wrds

我正在使用宏来根据名称循环文件并提取数据,这些数据适用于大多数情况,但我不时会遇到

ERROR: BY variables are not properly sorted on data set CQ.CQM_20141113.

其中CQM_20141113是我从中提取数据的文件。事实上,我的宏循环遍历CQ.CQM_2014:,它一直运行到20141113。由于这个单一的失败,因此不会创建文件。

我正在使用数据步骤视图来“初始化”数据,然后在另一步骤中调用数据步骤视图(代码示例缩短了条件):

%let taq_ds = CQ.CQM_2014:;

data _v_&tables / view=_v_&tables;
     set &taq_ds;
     by sym_root date time_m; *<= added by statement
     format sym_root date time_m;
     where sym_root = &stock;   
run; 

data xtemp2_&stockfiname (keep = sym_root year date iprice);
     retain sym_root year date iprice; 
     set _v_&tables; 
     by sym_root date time_m;

/* some conditions */
run;

当我通过日志文件看到错误并再次运行该文件时,它可以工作(有时我需要一些试验)。

我在想一个proc排序,但是在使用数据步骤视图时如何做到这一点? 请注意cqm文件非常大(也可能是问题的根源)。

编辑:taq_ds不是单个文件,而是运行多个名称以CQM_2014开头的文件,即CQM_20140101,CQM_20140102等。

2 个答案:

答案 0 :(得分:4)

根据提供的代码,您可以使用SQL one替换第一个数据步骤视图:

proc sql;
create view _v_&tables as
  select * from &taq_ds
  where sym_root = &stock
  order by sym_root, date, time_m;

或者,您可以使用类似的视图为数据步骤视图添加前缀。这将强制执行后续by语句所需的排序。

答案 1 :(得分:1)

在与taq_ds组订单相对应的by上创建索引也可以解决此问题,例如:

proc datasets lib=<library containing taq_ds>;
modify taq_ds;
index create index1=(sym_root date time_m);
run;
quit;