SAS - 如何使用宏修改多个数据集?

SAS - How to modify several datasets using a macro?

我正在尝试修改工作中的一些数据集(它们的名称遵循特定顺序,例如 data_AXPM061203900_20120104、data_AXPM061203900_20120105、data_AXPA061204100_20120103、data_AXPA061204100_20120104)图书馆。例如,我想删除所有数据集中的变量"price=0"。

我正在使用以下内容创建一个 table 来识别数据集:

    proc sql ;
      create table data.mytables as
      select *
      from dictionary.tables
      where libname = 'WORK' 
      order by memname ;
      quit ;

下一步,我尝试使用宏:

%macro test;
  proc sql ;
    select count(memname) into: obs from data.mytables;

  %let obs=&obs.;
    select catx("_", "data", substr(memname, 6, 13), substr(memname,20,27))
    into :setname1-:setname&obs.
    from data.mytables;
quit;


%do i=1 %to &obs.;

data  &&setname&i
set  &&setname&i

if bid_price= '.' then delete;
%end;
%mend test;

然而,彻底失败了。谁能给我一些建议?我真的不擅长宏。错误包括:

  1. 56: 无法确定 LINE 和 COLUMN。
  2. ERROR 56-185: SET is not allowed in the DATA statement when option DATASTMTCHK=COREKEYWORDS.检查中是否缺少分号 DATA 语句,或使用 DATASTMTCHK=NONE.

您在 DATA 语句和 SET 语句中缺少分号,可能应该添加一个 运行 语句。建议你试试:

%do i=1 %to &obs.;

  data  &&setname&i ;
    set  &&setname&i ;    
    if bid_price= '.' then delete;
  run;

%end;

注意DELETE语句是删除记录,不是删除变量。上面的代码期望 bid_price 是一个字符变量,并且当值为 '.' 时你想删除记录。