SAS Call Execute传递数字作为参数

时间:2016-11-09 14:21:47

标签: dynamic sas

我想在数据集中执行函数调用传递日期作为参数行:

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;

` 任何人都知道如何传递数字(日期)作为参数思考呼叫执行程序或其他简单方法'?

1 个答案:

答案 0 :(得分:0)

您的代码对我来说很好。 “日期”栏的格式是什么?如下所示,未格式化的日期值将使用您的技术传递给宏,就像您期望的那样:

  %macro dostuff(param);
    %put &param;
  %mend;
  data _null_;
    format date date9.;
    date='31DEC1999'd;
    put date=;
    call execute('%dostuff('!!date!!');');
  run;

给出:

date=31DEC1999 
14609

如果日期列实际上是字符字段,则需要将其转换为日期(数字)类型才能执行计算。通过call symput传递这些值是相同的。