2013-04-04 62 views
0

我工作的一個數據集(數據)的格式,我需要改變有3個變量(VAR1,VAR2,VAR3)數組聲明。 變量採用特殊日期格式(例如OLDFMT1),我需要使用DATEPART函數將它們更改爲常規SAS日期格式。使用與迭代DO語句

的問題是,我需要同時使用DO循環和調用DATEPART功能的陣列中的單個數據一步做到這一點。 DIM函數必須在數組中正確使用,並且在結束數據集之前,必須先刪除索引變量(i)。

然後,我也要用DATE9。函數來改變這些變量。

我是相當新的做循環,這是一個令我頭痛的大規模。任何幫助將不勝感激。

+0

請允許我澄清,因爲我不夠具體。這3個變量有3個完全不同的名稱(例如:var1,secondOne,thirdvar),並且不在連續的地方(即它們不在第1 - 3列;但是在第8,24,41列)。另外,一位有用的貢獻者指出,Date9。是一種格式,而不是一種功能。 – 2013-04-05 02:00:49

+0

您仍然可以按原樣使用Bob的解決方案;他使用快捷方式來定義數組,但仍然可以使用它 - array allvars var1 secondOne thirdvar;將完全按照他的名單工作。 – Joe 2013-04-05 03:20:19

回答

2

說你想使用的功能DATEPART,你在暗示你的三個現有變量當前存儲爲SAS「的日期時間」值。所以試試這個:

data have; 
    var1 = datetime(); 
    var2 = datetime(); 
    var3 = datetime(); 
    format var1-var3 datetime19.; 
run; 

data want; 
    set have; 
    array allvars(*) var1-var3; 
    do i=1 to dim(allvars); 
     allvars(i) = datepart(allvars(i)); 
     end; 
    format var1-var2 date9.; 
    drop i; 
run; 

請記住SAS只有兩種數據類型(數字和字符)。日期,時間和日期時間只有在以適當格式使用時纔是「已知的」。在SAS:

  • 一個日期是自1月1日的天數,1960年
  • 一個時間是因爲午夜的秒數
  • 一個日期時間是的秒數,因爲1960年1月1日。

並注意date9.不是函數;它是一種格式。有很多不同的格式可以用來「暴露」變量的底層價值,但價值本身不會改變。這是SAS編程的真正有用的功能之一。

+0

感謝您的幫助! – 2013-04-05 13:06:07

0

如果你只是想格式化爲DATE9,數據,而不是存儲爲一個日期,那麼你可以申請前綴DT任何日期格式並將其應用到datetime值。所以DTDATE9。格式將以date9格式顯示日期時間值。