如何获得宏变量来评估数学?

时间:2019-04-25 07:19:38

标签: sas

我有以下sas marco片段:

var $t=$('textarea');
$t.on('drop',(event)=>{
  setTimeout(()=>{alert(event.target.value);},0);
});

在运行时,它只是将变量创建为字符串,即

= 1000000 *(dhms(today()-1,0,0,0)-'01JAN1970:00:00'dt)

代替usecs中的unix时间戳。

使用unix_starttime = 1000000 *(&starttime-'01JAN1970:00:00'dt);数据步骤中宏以外的地方有效

我是否需要宏中的 null 数据步骤才能使其按预期工作?

谢谢

2 个答案:

答案 0 :(得分:1)

通常,%let语句之后的所有内容均视为纯文本。但是,有一些功能可以环绕文本,告诉SAS执行数学运算。

这些是%eval,用于整数计算,或者%sysevalf,其中需要涉及小数的计算。

所以您可以放%let unix_starttime = %eval(1000000*(&starttime - '01JAN1970:00:00'dt));

这在此处不适用,但是如果您需要在%let语句中包含一个函数,请在函数名前加上%sysfunc

答案 1 :(得分:1)

通常,如果要使用DATA,最好使用SAS代码而不是MACRO代码。如果以后需要,可以使用CALL SYMPUTX()生成宏变量。

data _null_;
  call symputx('unix_starttime',1000000*(&starttime - '01JAN1970:00:00'dt));
  ...
run;

您可以使用%eval()进行简单的整数算术和比较。如果需要使用浮点数(或日期/时间/日期时间文字),则需要使用%sysevalf()。

 %let unix_starttime=%sysevalf(1000000*(&starttime - '01JAN1970:00:00'dt));