Czy każdy może poinformować o odpowiednim informatorze SAS, aby odczytać w datetime (dd/mm/rrrr gg: mm) ???sas informat datetime
np
data _null_;
informat from_dt datetime????.;
input from_dt ;
put from_dt=;
cards;
01/01/1960 00:00
;run;
Czy każdy może poinformować o odpowiednim informatorze SAS, aby odczytać w datetime (dd/mm/rrrr gg: mm) ???sas informat datetime
np
data _null_;
informat from_dt datetime????.;
input from_dt ;
put from_dt=;
cards;
01/01/1960 00:00
;run;
Nie sądzę, że konkretny informat jest wbudowany, ale stosunkowo łatwo jest wykonać własne. Poniżej znajduje się przykład utworzenia niestandardowego datata informatycznego (wymaga to zbioru danych cntlin) i niestandardowego formatu (za pomocą instrukcji obrazkowej), który odczytuje dane w określonej dacie czasu, a następnie formatuje go z powrotem, aby wyglądał tak samo jak dane wejściowe. Uprościłem to, zakładając, że część czasu była zawsze północą (00:00), ale można ją łatwo rozszerzyć, jeśli chcesz również śledzić części czasu (wystarczy zmienić numer 86400 na 3600, aby uzyskać co godzinę, i 60 za każdą minutę). Pomaga zobaczyć, co się dzieje, jeśli otworzysz zestaw danych work.infmt, aby zobaczyć, jak to wygląda.
/* 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;
To dało moc takiego:
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
This entry z SAS knowledgebase zawiera kod przeznaczony do analizowania i formatowanie datetime. Wygląda na to, że SAS ma świetny system pomocy online.
Trzecia wiadomość pod numerem this exchange on Google groups również może być pomocna. Mówi o wprowadzaniu datetime i dostarcza kodu.
Twoje pytanie jest tak trudne do rozszyfrowania i niewiele wiem o SAS, to wszystko, co mogę zaoferować. Mam nadzieję, że to pomoże.
SAS nie obsługuje określony format datetime Twoje dane są w Można też spróbować przekształcić dane przychodzące do formatu frendlier czy można analizować datetime używając substr, DHMS and MDY funkcje:.
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;
lub alternatywnie można przekonwertować ciąg datetime w formacie datetimew.d i wejście sformatowany ciąg:
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;
konwersja może być skompresowany do jednego, lecz złożonym oświadczeniem, więc tworząc makro dla tego może być dobrą decyzją.
Przechodząc przez listę here, nie sądzę, że istnieje.
Niewykluczone, że można utworzyć własne z proc format
, ale myślę, że byłoby to bardzo trudne. Sugestia Ville'a Koskinena jest prawdopodobnie najlepsza.
The anydt * rodzina informats zrobić pracę, zwykle.
data _null_;
from_dt = input("01/01/1960 00:00", anydtdtm.);
put from_dt= :datetime20.;
run;
/* on log
from_dt=01JAN1960:00:00:00
*/
Niezły - nie widziałem wcześniej tego informatora. – cmjohns
Jeśli ktoś próbuje tego i ma problemy z nieprawidłowym interpretowaniem miesięcy i dat, spróbuj zaktualizować styl dat, uruchamiając 'options datestyle = dmy;' przed powyższym przykładem –