0
A
回答
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
相同的邏輯,艾倫的響應,但使用的數據步驟簡化代碼...
%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
見文檔用於計算月份差異的替代方法。
0
您可以使用intck()
函數來獲取月差數。
如果您正在執行的計算,如年齡,或任職,則一定要使用的intck()
的「連續」參數。
如果你只需要知道,是31月和01月在1個月的差異,然後使用「離散」(默認)參數。
%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
相關問題
- 1. SAS宏的日期
- 2. 使用SAS宏檢查有效日期
- 3. 日期差異
- 4. 日期差異
- 5. 日期差異
- 6. 提取SAS宏中的日期信息
- 7. 獲取日期的差異,使用GETDATE()
- 8. 日期的差異使用DIFF()
- 9. SAS-創建基於最小差異日期的唯一邂逅
- 10. SAS試圖獲得從訂單到發貨日期的差異
- 11. 日期用PHP差異
- 12. php日期差異?
- 13. 日期差異Javascript
- 14. PHP日期差異
- 15. 按日期差異
- 16. SQL日期差異
- 17. PHP日期差異
- 18. Sqlite日期差異
- 19. Sharepoint日期差異
- 20. SVNKit日期差異
- 21. Javascript日期差異
- 22. MySQL日期差異
- 23. php日期差異
- 24. jquery日期差異
- 25. SAS SQL宏增量日期範圍
- 26. SAS日期宏和壓縮函數
- 27. SAS宏從PROC SQL日期錯誤
- 28. 使用SAS中的宏變量自動化開始日期
- 29. SQL中的日期差異
- 30. IOS中的日期差異
那你試試?你做了什麼將你在宏變量中的字符串轉換爲實際的SAS日期值? – Tom
你怎麼定義'月'?如果日期是2月29日,下一個日期是3月1日,預期的答案是什麼?一個月不是一個時間的衡量標準,如周或日。 – Reeza