переменная формата sas с пользовательским форматом даты - как сохранить форматирование? - PullRequest
0 голосов
/ 21 февраля 2020
/*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; верните правильно 2020-02-21-09.28.28, но при вызове sdt позже будет% put & sdt; он возвращает неформатированное значение Макропеременная SDT разрешается в 1897896509

как получить sdt, чтобы сохранить его формат, или мне нужно продолжать использовать формат sdt dbdate. как-нибудь все-таки я называю переменную?

Спасибо

, здесь более поздний профессиональный шаг c sql, где мне нужно использовать переменную sdt в dbdate. формат:

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;

1 Ответ

1 голос
/ 21 февраля 2020

Для прохода через SQL требуется значение даты, представленное формой, отображаемой в вашем пользовательском формате изображения. Отправьте этот рендеринг в макропеременную, а не в базовое значение.

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

Вы можете исключить шаг DATA до 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;
...