【问题标题】:SAS- Error in automatic split all datasets in a librarySAS-自动拆分库中的所有数据集时出错
【发布时间】:2016-10-25 15:37:55
【问题描述】:

“DATA”库中有大约 100 个数据集。我使用以下代码拆分库中的所有数据集。

  1. 首先,我使用proc sql 将所有数据集放入一个表中并编号。
  2. 其次,我还使用proc sql读取每个数据集中的内容,以便设置拆分规则。更具体地说,拆分过程基于两个变量:date_l_ 和_ric。显然,date_l_ 是一个日期变量。 _ric 是标识股票名称的变量。这一步的结果如下所示:

  1. 最后,我使用%do j=1 %to &obs. 来拆分数据集。

但是,我遇到了如下所示的错误:

我找不到这个问题的根源,因为我没有将任何数据集命名为 WORK.SET

%macro split(sourcelib=,from=,going=);
proc sql noprint;  /*read datasets in a library*/
  create table mytables as
  select *
  from dictionary.tables
  where libname = &sourcelib
  order by memname ;

  select count(memname) 
  into:numb 
  from mytables;

  %let numb=&numb.;

  select memname
  into : memname1-:memname&numb.
  from mytables;
quit;

  %do i=1 %to &numb.;
    proc sql noprint;
     create table tmp&i as
     select distinct date_l_, _ric
     from &from.&&memname&i;

     select count(*)
     into :obs
     from work.tmp&i;

     %let obs=&obs.;

     select date_l_, _ric, catx("_", substr(_ric, 1, 13), date_l_)
     into :date_l_1-:date_l_&obs., :ric1-:ric&obs., :setname1-:setname&obs.
     from work.tmp&i;
    quit;
   %end;
    data 
    %do j = 1 %to &obs.;
       &going.&&setname&j
    %end;
      ;
    %do i=1 %to &numb.;
      set &from.&&memname&i
    %end;
      ;/*may invoking i to numb.*/
      select;
    %do j = 1 %to &obs.;
      when(_ric = "&&ric&j" and date_l_ = &&date_l_&j) output  &going.&&setname&j;
    %end;
end;
%mend;

%split(sourcelib='AXP',from=AXP.,going=AXP.)

【问题讨论】:

    标签: loops error-handling split macros sas


    【解决方案1】:

    i 需要一个新循环

    data 
    %do i = 1 %to &obs.;   /*set rules for separated dataset*/
      &&setname&i
    %end;
      ;
      set &source.&&memname&i;/*I assume this part as the core problem*/
    

    当您尝试解析该值时,您没有循环查找 i。所以i 的最后一个值 + 1 来自上一个循环 (i=1 to &obs)。

    我假设您实际上希望在上述循环中执行该数据步骤 (i=1 to &numb)。在这种情况下,将&obs 上的循环更改为使用i 以外的其他内容(可能是j ?)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-16
      • 2014-02-21
      • 2020-01-31
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      • 2013-12-22
      • 1970-01-01
      相关资源
      最近更新 更多