我認爲值得在這裏更詳細地探討問題。
首先,格式是將數值轉換爲人類可讀格式的模式。這就是你想要在這裏做的:將日期值轉換爲可讀的格式,在這種情況下爲一年。
另一方面,信息將人類可讀信息轉換爲數字值。這不是你在這裏做的;你已經有了價值。
二,put
與格式匹配,而input
僅與信息匹配。
第三,您在最後一次嘗試時會接近:但您錯誤地使用了year
格式。格式基本上是值映射,因此它們將其範圍內的每個可能的數值(有時「所有值」都是範圍,有時不是)映射到顯示值(字符串)。你需要知道輸入的期望值是多少。 YEARw.
需要日期值作爲輸入,而不是年份值:意味着輸入是「從1/1/1960開始的天數」,映射到「年份」。因此,您無法將已經映射到年份值的值與該方法重新映射;它沒有任何意義。
讓我們來看看它:
data _null_;
yy = year(input("&sysdate9.", date9.));
put yy= yy year2.;
run;
yy
包含year
函數的結果 - 2016年好爲止。現在,你需要2位數的年份(16);你可以通過mod
功能,如果你喜歡,或把/ SUBSTR /輸入:
data _null_;
yy = input(substr(put(year(input("&sysdate9.", date9.)),4.),3,2),2.);
put yy=;
run;
mod
是可能更容易但因爲它是一個數字。當然,你可能已經使用year
:
data _null_;
yy = put(input("&sysdate9.", date9.),year2.);
put yy=;
run;
現在,yy
是性格,所以你可以換與input(...,2.)
或者根據你的目的離開它的性格。
最後 - 使用說明&sysdate9.
。您可以輕鬆地使這個日期沒有輸入:
"&sysdate9."d
所以:
yy = put("&sysdate9."d,year2.);
這就是所謂的字面日期(和"..."dt
和"..."t
也爲日期時間的工作,時間)。他們需要標準SAS格式的東西才能正常工作。
正如Nicarus的回答指出的那樣,today()
比&sysdate9
好一點,因爲它保證是今天的。如果您正在批量運行此程序或每天重新啓動會話,則這並不重要,但如果您有長時間運行的會話,則會這樣。
來源
2016-11-01 18:24:37
Joe
'PUT'是一個區別,當然,也可以嘗試用'SYSDATE'替換'TODAY()' - 你會看到另一個區別... – Nicarus
感謝您的解釋! – Joe