具有自定义日期格式的 sas 格式变量 - 如何保留格式?

sas format variable with custom date format - how to retain formatting?

/*Create datetime format for db*/

proc format;
picture dbdate
    other = '%Y-%0m-%0d-%0H.%0M.%0S' (datatype=datetime);
run;

/*Create variable that is 24 hours ago*/

data _null_;
sdt = intnx("HOUR",datetime(),-1,"SAME");
format sdt dbdate.;
call symput ('sdt',sdt);
run;

%put &sdt;

当运行 put sdt; return 2020-02-21-09.28.28 正确,但是稍后调用 sdt 时它 %put &sdt;它 returns 未格式化的值宏变量 SDT 解析为 1897896509

如何让 sdt 保留其格式,或者我是否需要继续使用格式 sdt dbdate。不知何故每次我调用变量?

谢谢

这里是后面的 proc sql 步骤,我需要在 dbdate 中使用 sdt 变量。格式:

proc sql;
connect to db (database=bob user="&srvuser" password="&srvpass") ;
create table ted as 
select * from connection to db
(Select *
        from work 
        where num = 7387 and ADD_TMSTMP < &sdt);
disconnect from db;
quit;
run;

传递 SQL 需要一个日期值,该日期值由您的自定义图片格式呈现的表单表示。将该渲染发送到宏变量,而不是基础值。

call symput ('sdt',put(sdt,dbdate.));

如果您编码

,您可以在 SQL 之前删除您的数据步骤
proc sql;
connect to db (database=bob user="&srvuser" password="&srvpass") ;
create table ted as 
select * from connection to db
(Select *
        from work 
        where num = 7387 
        and
          ADD_TMSTMP 
          <

          %sysfunc(intnx(HOUR,%sysfunc(datetime()),-1,SAME),dbdate.)
);
disconnect from db;
quit;
run;

如果通过 SQL 的传递需要单引号日期表示,例如 '2020-02-21-06.06.36' 您将需要更新您的自定义格式以包含边界单引号。

proc format;
  picture dbdate
    other = '''%Y-%0m-%0d-%0H.%0M.%0S''' (datatype=datetime);
run;