我正在使用宏来根据名称循环文件并提取数据,这些数据适用于大多数情况,但我不时会遇到
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等。
答案 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;