2017-04-05 60 views
0

我有一個服務,它會提取.csv並將其處理爲.sas7bdat。如何顯示日期爲DD MMM YYYY從.csv導入

我通過填寫變量名稱,長度和指定輸出位置來修改現有的.sas模板。

我有一個場景,其中.csv的日期格式爲「DD MMM YYYY」。我需要將這種格式保存到輸出文件。預定義的格式允許「DDMMMYYY」和「DD-MMM-YYYY」。我已經在模板中嘗試了這些格式類型。

下面是有標準字符類型的模板:

LIBNAME TempSrc "C:\Temp"; 
proc import datafile="\\***\FileLocation\file.csv" 
     out=mydata dbms=dlm replace; 
     DELIMITER= ","; 
     getnames=yes; 
     options ExtendObsCounter=yes; 
RUN; 
DATA TempSrc.fileName; 
    attrib  DATEVAR length=$11 format=$11.  informat=$11.  label='Date' 
      ; 
      set work.mydata; 
RUN; 

我怎麼能修改此代碼以輸出的日期如下2000' '01 JAN

編輯:

如何我可以將該值作爲字符值輸出到.sas7bdat嗎?

+1

所以你_input_ CSV已'01 JAN 2000' 和你想要的_output_數據集也包含2000' '01 JAN?您現有的代碼已經通過讀取值作爲字符變量來完成此操作。那麼......實際問題是什麼?您是否想將其轉換爲實際的日期值(如此,數字),但將其格式化爲顯示「DD MMM YYYY」? –

+0

如果將字符長度保留爲字符,則會顯示錯誤「錯誤:變量DATEVAR已被定義爲字符和數字。」 「 –

回答

0

沒有默認格式顯示爲DD MMM YYYY,因此需要自行打印。我相信下面給你你想要達到的:

proc format; 
picture ddmmmyy 
    other= '%0d %b %Y' (datatype=date); 
run; 

data have; 
    datevar='01 JAN 2000'; 
run; 

data want; 
    set have; 
    actualdatevar=input(datevar,anydtdte11.); 
    format actualdatevar ddmmmyy11.; 
run; 

給出:

enter image description here

注意,你不能將字符變量轉換爲數值,所以你可能希望創建一個新的變量,然後刪除舊的變量(也可以重命名新變量,以便最終獲得相同的變量名稱)。

EDIT1:適用於具體的答案(現在的情況是更清晰)

下應該達到所需要的:

LIBNAME TempSrc "C:\Temp"; 

proc format; 
picture ddmmmyy 
    other= '%0d %b %Y' (datatype=date); 
run; 

proc import datafile="\\***\FileLocation\file.csv" 
     out=mydata dbms=dlm replace; 
     DELIMITER= ","; 
     getnames=yes; 
     options ExtendObsCounter=yes; 
RUN; 
/* if all you need to do is apply the format, you may be better using proc datasets */ 
DATA TempSrc.fileName; 
    set work.mydata; 
    format DATEVAR ddmmmyy11. ; 
RUN; 

EDIT2:使其在通用瀏覽器中正確顯示轉換爲字符(沒有自定義格式)

LIBNAME TempSrc "C:\Temp"; 

proc format; 
picture ddmmmyy 
    other= '%0d %b %Y' (datatype=date); 
run; 

proc import datafile="\\***\FileLocation\file.csv" 
     out=mydata dbms=dlm replace; 
     DELIMITER= ","; 
     getnames=yes; 
     options ExtendObsCounter=yes; 
RUN; 
/* convert numeric to character via rename */ 
DATA TempSrc.fileName; 
    set work.mydata (rename=(DATEVAR=DATEVAR2)); 
    DATEVAR=put(DATEVAR2,ddmmmyy11.); 
    drop DATEVAR2; 
RUN; 
+0

這不起作用。輸出文件顯示未格式化的日期值。 我在proc導入之後和數據步驟之前插入了proc格式。然後將DATEVAR更改爲format = ddmmmyy11。 –

+0

嗨丹 - 我必須創建一個可重現的例子,以演示格式並解釋概念。據我現在的理解,你的輸入變量是NUMERIC,因此你需要的只是proc格式(注意,只需要在數據步驟之前有這個_before_,相對於proc import的位置就不重要了)。你的問題現在解決了嗎?我的回答有幫助嗎? –

+0

當在產生它的SAS工具之外查看.sas7bdat時,這似乎不起作用。所以,當我在通用瀏覽器中打開它時,ddmmmyy11格式會丟失。 –

相關問題