不确定执行以下操作的最佳方法-我想从DATA步骤中调用宏函数,将现有列中的值作为参数传递,并将由宏函数生成的值分配给新柱。我愿意接受任何方法-PROC SQL,CALL EXECUTE等。
<?php echo $form->dateTimeLocalField($model, 'datetime'); ?>
答案 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;