【发布时间】:2018-12-11 09:45:04
【问题描述】:
我正在尝试设置自动宏变量日期以在 SAS HiveQL 中运行脚本
对于标准 SAS 查询,我通常会使用类似的内容:
%let start_date = %sysfunc(intnx(month, "&sysdate"d, -1, B));
但是我需要将日期转换为 yyyy-mm-dd 格式来运行 HiveQL 查询。
在设置宏变量时不确定如何将 SAS 日期转换为这种格式。
欢迎任何帮助。
【问题讨论】:
我正在尝试设置自动宏变量日期以在 SAS HiveQL 中运行脚本
对于标准 SAS 查询,我通常会使用类似的内容:
%let start_date = %sysfunc(intnx(month, "&sysdate"d, -1, B));
但是我需要将日期转换为 yyyy-mm-dd 格式来运行 HiveQL 查询。
在设置宏变量时不确定如何将 SAS 日期转换为这种格式。
欢迎任何帮助。
【问题讨论】:
使用%sysfunc()时可以指定格式:
%let start_date = %sysfunc(intnx(month, "&sysdate"d, -1, B), yymmdd10.);
【讨论】:
week.2 吗?
对于夜猫子,自动宏变量 sysdate 是 SAS 会话开始的日期。长时间运行的会话可能需要使用函数 today() 来获取当前日期。
远程传递日期文字也需要单引号。
%let remoteDateLiteralForPassThrough = %str(%')%sysfunc(putn(%sysfunc(today()),yymmdd10.))%str(%');
%put &=remoteDateLiteralPassThrough;
%let remoteDateTimeLiteralForPassThro = %str(%')%sysfunc(putn(%sysfunc(today()),yymmdd10.))T0:0:0%str(%');
%put &=remoteDateTimeLiteralForPassThro;
添加:上个月的第一天为'yyyy-mm-dd'
%let start_date_num = %sysfunc(intnx(month, %sysfunc(today()), -1, B));
%let db_start_date = %str(%')%sysfunc(putn(&start_date_num,yymmdd10.))%str(%');
【讨论】:
%let start_date = %str(%')%sysfunc(intnx(month, "&sysdate"d, -1, B), yymmdd10.)%str(%');