SAS:排序错误(变量未正确排序)

时间:2018-04-30 18:27:31

标签: sorting dynamic sas conditional-statements datastep

这个问题是我在这里的另一个问题的后续问题SAS: Data step view -> error: by variable not sorted properly;我正在打开一个新问题,因为所需的解决方案略有不同:当我循环浏览几个输入文件时,其中一个原始文件没有正确排序,我想知道如何让我的程序跳过该特定输入文件并继续?

引用:

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

public Result parseNode(SndNode node){
        try {
        ...
        ... // attempt to parsed node 
    } catch (ParseException e) {
        throw new ParseException;
    }   
} 

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

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

CQ.CQM_2014:

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

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

编辑:我尝试了你的代码(并在数据步骤视图中删除了by语句),但是我收到了这个错误:

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

1 个答案:

答案 0 :(得分:3)

您是否需要在视图创建中使用by语句?

如果没有,则从视图中排序为临时数据集:

proc sort data=_v_&tables out=__temp; 
     by sym_root date time_m;
run;

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

/* some conditions */
run;

另一种选择是在PROC SQL中添加排序顺序创建视图:

proc sql noprint;
create view _v_&tables as
select <whatever>
   from &taq_ds
   where <clause>
   order by sym_root, date, time_m;
quit;