我想在数据集中执行函数调用传递日期作为参数行:
data _Null_;
set calc_dates;
CALL EXECUTE ('%doStuff('||date||');');
run;
然而,这不适用于' date'以字符串形式传递。即使我尝试将其转换为数字,任何数值评估都会爆炸。以下工作有效,但感觉过于复杂: `
%macro loopMeUp;
proc sql noprint;
select count(*) into :MaxActions from calc_dates;
quit;
%do i=1 %to &MaxActions;
data _NULL_;
set calc_dates;
if _N_=&i_sjm.;
call symput("temppi",date);
run;
%DoStuff(&temppi.);
%end;
%mend loopMeUp;
` 任何人都知道如何传递数字(日期)作为参数思考呼叫执行程序或其他简单方法'?
答案 0 :(得分:0)
您的代码对我来说很好。 “日期”栏的格式是什么?如下所示,未格式化的日期值将使用您的技术传递给宏,就像您期望的那样:
%macro dostuff(param);
%put ¶m;
%mend;
data _null_;
format date date9.;
date='31DEC1999'd;
put date=;
call execute('%dostuff('!!date!!');');
run;
给出:
date=31DEC1999
14609
如果日期列实际上是字符字段,则需要将其转换为日期(数字)类型才能执行计算。通过call symput
传递这些值是相同的。