2009-09-07 8 views
7

कोई भी डेटाटाइम (डीडी/मिमी/yyyy एचएच: मिमी) में पढ़ने के लिए उपयुक्त एसएएस सूचना पर सलाह दे सकता है ???एसएएस informat डेटाटाइम

जैसे

data _null_; 
informat from_dt datetime????.; 
input from_dt ; 
put from_dt=; 
cards; 
01/01/1960 00:00 
;run; 

उत्तर

8

मुझे नहीं लगता कि विशिष्ट सूचना अंतर्निहित है, लेकिन यह आपके लिए रोल करना अपेक्षाकृत आसान है। नीचे एक कस्टम डेटाटाइम सूचना बनाने के लिए एक उदाहरण है (इसके लिए एक cntlin डेटा सेट की आवश्यकता है) और एक कस्टम प्रारूप (चित्र विवरण का उपयोग करके) जो आपके विशिष्ट डेटाटाइम में पढ़ता है और उसके बाद इनपुट के समान दिखने के लिए इसे वापस स्वरूपित करता है। मैंने यह मानकर इसे सरल बना दिया कि समय भाग हमेशा मध्यरात्रि (00:00) था, लेकिन यदि आपको समय के हिस्सों का ट्रैक रखने की आवश्यकता है तो इसे आसानी से विस्तारित किया जा सकता है (केवल 86400 संख्या को 3600 तक बदलें, हर घंटे प्राप्त करने के लिए, और 60 हर मिनट के लिए)। यह देखने में सहायता करता है कि क्या हो रहा है यदि आप work.infmt डेटा सेट को खोलने के लिए यह देखते हैं कि यह कैसा दिखता है।

/* Create a custom datetime format as Month/Day/Year<space>Hours:Minutes*/ 
proc format; 
    picture mydt other='%0m/%0d/%0Y %0H:%0M' (datatype=datetime); 
run; 

/* Create a custom informat using the format above */ 
data infmt ; 
retain fmtname "dtwithspace" type "I" ; 
    do label = "1jan1960:00:00"dt to 
       "2jan2059:00:00"dt by 86400 ; 
     start = trim(left(put(label,mydt.))); 
     output ; 
    end ; 
run ; 
proc format cntlin = infmt ; 
run ; 


/* Now apply the informat and format to the data */ 
data _null_; 
input from_dt $ 1-20; 
format from_dt2 mydt.; 
from_dt2=input(from_dt, dtwithspace.); 
put from_dt2=; 
cards; 
01/01/1960 00:00 
01/02/1999 00:00 
; 
run; 

यह इस तरह एक निर्गम दिया:

278 data _null_; 
279 input from_dt $ 1-20; 
280 format from_dt2 mydt.; 
281 from_dt2=input(from_dt, dtwithspace.); 
282 put from_dt2=; 
283 cards; 

from_dt2=01/01/1960 00:00 
from_dt2=01/02/1999 00:00 
0

This entrySAS knowledgebase से पार्स और स्वरूपण datetime के लिए कोड भी शामिल है। ऐसा लगता है कि एसएएस की एक महान ऑनलाइन सहायता प्रणाली है।

this exchange on Google groups में तीसरा संदेश भी सहायक हो सकता है। यह डेटाटाइम इनपुट करने के बारे में बात करता है, और कोड प्रदान करता है।

आपका प्रश्न समझने में इतना मुश्किल है, और मुझे एसएएस के बारे में बहुत कुछ पता है, जो मैं पेशकश कर सकता हूं। आशा करता हूँ की ये काम करेगा।

5

एसएएस विशिष्ट दिनांक प्रारूप आपके डेटा में है का समर्थन नहीं कर सकते हैं आप या तो एक frendlier प्रारूप करने के लिए आने वाले डेटा कन्वर्ट करने के लिए कोशिश कर सकते हैं या आप substr, DHMS and MDY फ़ंक्शन का उपयोग datetime पार्स सकता है:।

data test; 
    format dtstr $16. dt datetime22.4; 
    dtstr='01/01/1960 00:00'; 
    day=substr(dtstr,1,2); 
    month=substr(dtstr,4,2); 
    year=substr(dtstr,7,4); 
    hour=substr(dtstr,11,2); 
    minute=substr(dtstr,15,2); 
    dt=DHMS(MDY(1*month,1*day,1*year),1*hour,1*minute,0); 
    output; 
run; 

या वैकल्पिक रूप से आप एक datetimew.d प्रारूप और इनपुट में datetime स्ट्रिंग परिवर्तित कर सकते हैं स्वरूपित स्ट्रिंग:

data test; 
    format dtstr $16. dstr $8. tstr $5. indtstr $14. dt datetime22.4; 
    dtstr='01/01/1960 00:00'; 
    dstr=put(input(substr(dtstr,1,10),mmddyy10.),date8.); 
    tstr=substr(dtstr,12); 
    indtstr=dstr!!':'!!tstr; 
    dt=input(indtstr,datetime14.0); 
    output; 
run; 

रूपांतरण एक भी लेकिन जटिल बयान के लिए संकुचित किया जा सकता है, तो यह के लिए एक मैक्रो बनाने एक अच्छा निर्णय हो सकता है।

0

सूची here पर जाकर, मुझे नहीं लगता कि एक है।

निश्चित रूप से आप proc format के साथ अपना खुद का निर्माण कर सकते हैं, लेकिन मुझे लगता है कि यह बहुत मुश्किल होगा। विले कोस्किनन का सुझाव शायद आपकी सबसे अच्छी शर्त है।

8

anydt * informats का परिवार, काम करना आम तौर पर।

data _null_; 
    from_dt = input("01/01/1960 00:00", anydtdtm.); 
    put from_dt= :datetime20.; 
run; 
/* on log 
from_dt=01JAN1960:00:00:00 
*/ 
+0

अच्छा - मैंने पहले उस सूचना को नहीं देखा था। – cmjohns

+0

यदि कोई इसे आजमा रहा है और महीने और तारीख के साथ समस्याएं गलत तरीके से व्याख्या की जा रही हैं तो उपर्युक्त उदाहरण से पहले 'विकल्प डेटास्टाइल = dmy; 'चलाकर डेटास्टाइल को अपडेट करने का प्रयास करें। –

संबंधित मुद्दे