从数据setp中的​​宏函数返回并分配全局值

时间:2018-11-20 19:26:22

标签: sas

不确定执行以下操作的最佳方法-我想从DATA步骤中调用宏函数,将现有列中的值作为参数传递,并将由宏函数生成的值分配给新柱。我愿意接受任何方法-PROC SQL,CALL EXECUTE等。

<?php echo  $form->dateTimeLocalField($model, 'datetime'); ?>

2 个答案:

答案 0 :(得分:3)

如果要在语句中间使用宏,例如:

newdate = %simple(x);

然后宏只能发出一部分语句。那不是分号。

在这种情况下,如果定义宏以生成对INTNX()的调用,则可以在赋值语句中以这种方式使用它。

%macro simple(value);
  intnx('month',%sysfunc(today()),&value,'same')
%mend simple;

因此,如果today()是20NOV2018,那么您将在数据步骤中有效地运行此有效SAS语句。

newdate = intnx('month',21508,x,'same') ;

请注意,变量X的名称是传递给宏的内容以及在生成的SAS代码段中使用的内容。

当然,如果您想尝试在SAS语句之外使用它,那么现在宏将无用。

答案 1 :(得分:1)

请注意对%SIMPLE的更改及其调用位置。 RESOLVE适用于这种情况,但
%COMPLEX :-)不会。同样,最好不要调用宏,这可以在数据步骤中完成。我希望您能比工作安全更好地使用它。

%macro simple(x=);
   %sysfunc(intnx(month, %sysfunc(today()), &x, same))
   %mend simple;

%put NOTE: %simple(x=1);

data have;
    do x = 1 to 15;
        output;
    end;
run;

data want;
   set have;
   newdate = input(resolve(cats('%simple(x=',x,')')),F16.);
   format newdate date9.;
   run;
proc print;
   run;