我正在尝试修改工作库下的一些数据集(它们的名称遵循特定顺序,如data_AXPM061203900_20120104,data_AXPM061203900_20120105,data_AXPA061204100_20120103,data_AXPA061204100_20120104)。例如,我想在所有数据集中删除变量“price = 0”。
我正在使用以下内容创建一个表来识别数据集:
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;
然而,它完全失败了。有人能给我一些建议吗?我真的不擅长宏。错误包括:
答案 0 :(得分:1)
您在DATA语句和SET语句中缺少分号,并且应该添加RUN语句。建议你试试:
%do i=1 %to &obs.;
data &&setname&i ;
set &&setname&i ;
if bid_price= '.' then delete;
run;
%end;
请注意,DELETE语句正在删除记录,而不是删除变量。上面的代码要求bid_price是一个字符变量,并且当值为'。'时你要删除记录。