我有以下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 数据步骤才能使其按预期工作?
谢谢
答案 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));