I have two macro variables value.
a=20150501
b=20160530
我想创建一个新的宏变量,它将显示a和b之间的月数。
答案 0 :(得分:2)
与Allan的响应相同的逻辑,但使用数据步骤来简化代码......
%let a = 20150501;
%let b = 20160530;
data _null_;
a = input(put("&a", 8.), yymmdd8.);
b = input(put("&b", 8.), yymmdd8.);
diff = intck("month", a, b);
call symputx("diff", put(diff, best.));
run;
%put &diff;
12
请参阅intck
的文档,了解以月计算差异的其他方法。
答案 1 :(得分:1)
您可以使用INTCK功能 - 请参阅documentation
%let a=20150501;
%let b=20160530;
/**
* first - convert to date values
* (DATE_A=01MAY2015 DATE_B=30MAY2016)
*/
%let date_a=%sysfunc(putn(%sysfunc(
INPUTN(%sysfunc(PUTN(&a, Z8.)), YYMMDD8.)
), date9.));
%let date_b=%sysfunc(putn(%sysfunc(
INPUTN(%sysfunc(PUTN(&b, Z8.)), YYMMDD8.)
), date9.));
%put &=date_a &=date_b;
/**
* Now calculate difference using INTCK
* (DIFF=12)
*/
%let diff=%sysfunc(intck(MONTH,"&date_a"d,"&date_b"d));
%put &=diff;
答案 2 :(得分:0)
您可以使用intck()
功能获取月数差异。
如果您正在执行年龄或任期等计算,请务必使用intck()
的'连续'参数。
如果您只是需要知道31-May和01-Jun之间有1个月的差异,那么请使用'discrete'(默认)参数。
%let a=20150531;
%let b=20150601;
* CONVERT TO SAS DATES;
%let date1 = %sysfunc(inputn(&a,yymmdd8.));
%let date2 = %sysfunc(inputn(&b,yymmdd8.));
* CALCULATE # DISCRETE MONTHS DIFFERENCE;
%let discrete_months = %sysfunc(intck(month, &date1, &date2, d));
%put &=discrete_months;
* CALCULATE # CONTINUOUS MONTHS DIFFERENCE;;
%let cont_months = %sysfunc(intck(month, &date1, &date2, c));
%put &=cont_months;
输出:
DISCRETE_MONTHS=1
CONT_MONTHS=0