SAS:如何从marco变量中提取年/月/日并添加整数?

SAS:如何从marco变量中提取年/月/日并添加整数?,sas,Sas,打印日期:2017年12月31日 proc sql; select max(data_bsn_dt) into:date01 from tableA; quit; %put &date02; 打印日期:年份(“2017年12月31日”d) 我使用代码:year(&date01“d)来提取前一年或前一个月的数据,但它现在不起作用。可能有时间解决,谢谢 即使在数据步骤中,它仍然不起作用 %put year("&date01"d); 它不起作用,因为您在过程或数据步骤之外调用它

打印日期:2017年12月31日

proc sql;
select max(data_bsn_dt) into:date01 from tableA;
quit;

%put &date02;
打印日期:年份(“2017年12月31日”d)

我使用代码:year(&date01“d)来提取前一年或前一个月的数据,但它现在不起作用。可能有时间解决,谢谢

即使在数据步骤中,它仍然不起作用

%put year("&date01"d);

它不起作用,因为您在过程或数据步骤之外调用它

要使其在此上下文中工作,您需要将其包装在
%SYSFUNC
中:

data _nulll;
if year("&date01"d)=2017
then call execute('proc sql;
                   select * from tableB;');
run;
要添加整数,可以使用
%EVAL
(例如):


如何分配
date02
宏变量?变量
data\u bsn\u dt
的数据类型是什么?它的SAS格式是什么?如果
date02
date01
的打字错误,那么
max(data_bsn_dt)
打印
2017年12月31日
的可能方式是
data_bsn_dt
是一个字符变量,范围从“2017年12月1日”到
2017年12月31日”。为什么?因为SQL MAX不会将其结果格式化为与它正在查找的最大值相同的项。使用
OPTIONS SYMBOLGEN`记录宏变量的解析方式。单值INTO防止SQL
trimmed
,即
max(变量)为:myVar trimmed
%PUT %SYSFUNC(YEAR("&DATE01"d));
%PUT %EVAL(%SYSFUNC(YEAR("&DATE01"d))+7);