sas 在数据步骤中为每个实例执行一个宏

sas execute a macro for each instance in a data step

我有一个宏,可以在一组给定的时间范围内将数据插入 table。

它循环遍历一系列从-到日期(存储在数据集中)并运行使用 proc sql 插入语句对宏进行循环。

在所有这些结束时检查数据时,我注意到新数据集中只有最后一个 from-to 期间的数据。

这是我在数据步骤中调用宏时的代码。

data _null_;
    set extract_insert_dates;
    %insert_table_extract(put(extract_start, date11.),put(extract_end, date11.));
run;

我是否应该在数据步骤中调用其他一些东西来使其工作并为每个从到时期插入数据(运行 宏),而不仅仅是最后一个?

假设您是宏编译器,并将宏调用替换为它将生成的实际 SAS 代码。请记住,对于宏过程,put(extract_start, date11.)put(extract_end, date11.) 的参数值只是字符串。

我怀疑您需要使用 call execute 以便可以将数据集变量 extract_startextract_end 的值传递给宏。

data _null_;
  set extract_insert_dates;
  call execute(cats('%nrstr(%insert_table_extract)(',put(extract_start, date11.),',',put(extract_end,date11.),')'));
run;