我想把一個日期作為一個變數,我想轉換成另一種格式(sas 線人)。我需要那些變成一個字符來與表名連接。
%LET GL_YMD= %sysfunc(mdy(1,31,2009),date9.);/*expeced result GL_YMD=31JAN2009*/
%LET YYYYMMDD= %sysfunc(inputn(&GL_YMD,YYMMDD8.)); /*expeced result YYYYMMDD=20090131*/
%LET YYYYMM= %sysfunc(inputn(&GL_YMD,YYYYMM)); /*expeced result YYYYMM=200901*/
我閱讀了很多關于這個主題的教程,它似乎應該可以作業,但它:我得到一個回應:注 49-169:在未來的 SAS 版本中,帶引號的字串后識別符號的含義可能會改變。建議在帶引號的字串和后續識別符號之間插入空格。
uj5u.com熱心網友回復:
沒有收到注釋,但我確實收到了來自 INPUTN 功能的警告。您需要 PUTN 功能。注意日期文字的使用。
45 %LET GL_YMD= %sysfunc(mdy(1,31,2009),date9.);/*expeced result GL_YMD=31JAN2009*/
46 %put &=GL_Ymd;
GL_YMD=31JAN2009
47 %LET YYYYMMDD= %sysfunc(putn("&GL_YMD"d,YYMMDDn8.)); /*expeced result YYYYMMDD=20090131*/
48 %put &=yyyymmdd;
YYYYMMDD=20090131
49 %LET YYYYMM= %sysfunc(putn("&GL_YMD"d,YYMM.)); /*expeced result YYYYMM=200901*/
50 %put &=yyyymm;
YYYYMM=2009M01
uj5u.com熱心網友回復:
inputn()
將字符轉換為數字。您想putn()
改用,并將日期指定為日期文字,"&GL_YMD"d
. 您已將日期轉換為字符 date9 格式,并且這些函式需要一個 SAS 日期編號。
請注意,您還應該使用yymmddn8.
as your 和yymmn6.
as your 格式來獲得預期的結果。
%LET GL_YMD= %sysfunc(mdy(1,31,2009), date9.);
%put &gl_ymd; /* 31JAN2009 */
%LET YYYYMMDD= %sysfunc(putn("&GL_YMD."d, YYMMDDN8.)); /* 20090131 */
%put &yyyymmdd; /* 20090131 */
%LET YYYYMM= %sysfunc(putn("&GL_YMD"d, YYMMN6.));
%put &yyyymm.; /* 200901 */
"&GL_YMD"d
相當于:
%sysfunc(inputn(&GL_YMD., date9.) );
請注意,這是一種特殊情況。該函式可以正確解決這個問題,因為它旨在決議日期文字,但就宏編譯器而言,它只是文本。如果您"&GL_YMD"d
輸入日志,您將完全看到這一點。這可能是一個令人困惑的規則,但了解宏中的日期函式會很有幫助。
uj5u.com熱心網友回復:
格式將值轉換為文本。您可以將格式與 PUT()、PUTN() 和 PUTC() 函式以及 PUT 和 FORMAT 陳述句一起使用。數字格式將數字轉換為文本。字符格式將字符值轉換為文本。
資訊將文本轉換為值。您可以將資訊與 INPUT()、INPUTN() 和 INPUTC() 函式以及 INPUT 和 INFORMAT 陳述句一起使用。數字資訊將文本轉換為數字。字符資訊將文本轉換為字串。
您首先使用了 MDY() 函式和 DATE9。格式規范以創建字串 31JAN2009。然后,您嘗試使用 INPUTN() 函式來解釋該字串,就好像它采用 YYMMDD 資訊所識別的樣式一樣。但該資訊不會理解字母 JAN。即使有效,它也會回傳用于表示該日期的內部天數,而不是您聲稱想要的風格化 YYYYMMDD 字串。
因此,請使用 PUTN() 函式,而不是使用 FORMAT,而不是 INFORMAT。將以 YYYYMMDD 樣式生成字串的 FORMAT 規范是 YYMMDDN8。生成 YYYYMM 樣式的字串的格式是 YYMMN6。格式。
%let date=%sysfunc(mdy(1,31,2009));
%let GL_YMD=%sysfunc(putn(&date,date9.));
%let YYYYMMDD=%sysfunc(putn(&date,YYMMDDN8.));
%let YYYYMM=%sysfunc(putn(&date,YYMMN6.));
結果:
110 %put &=date &=gl_ymd &=yyyymmdd &=yyyymm ;
DATE=17928 GL_YMD=31JAN2009 YYYYMMDD=20090131 YYYYMM=200901
如果您想讓 SAS 將字串 31JAN2009 解釋為日期值,則需要將其轉換為日期文字(DATE 資訊可以解釋的帶引號的字串,后跟字母 d)。所以你也可以使用 GL_YMD 中的字串來表示這樣的日期:
%let YYYYMMDD=%sysfunc(putn("&gl_ymd"d,YYMMDDN8.));
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/494920.html
上一篇:我不能使用函式外的區域變數