Použití dat / výukových modulů SAS
čtení dat v datech
Tento modul ukáže, jak číst proměnné data, používat funkce Data a používat formáty zobrazení data v SAS. Předpokládá se, že jste obeznámeni s datovými kroky pro čtení dat do SAS a příkazy přiřazení pro výpočet nových proměnných. Pokud se některý z těchto pojmů jsou zcela nové, možná budete chtít podívat na další informace níže pro pokyny do dalších vzdělávacích modulů. Datový soubor použitý v prvním příkladu je uveden dále.
John 1 Jan 1960Mary 11 Jul 1955Kate 12 Nov 1962Mark 8 Jun 1959
program níže čte data a vytvoří dočasný datový soubor s názvem data. Všimněte si, že data jsou čtena v datovém kroku, a formát date11. používá se ke čtení data.
DATA dates; INPUT name $ 1-4 @6 bday date11.;CARDS;John 1 Jan 1960Mary 11 Jul 1955Kate 12 Nov 1962Mark 8 Jun 1959;RUN;PROC PRINT DATA=dates;RUN;
výstup z proc print je uveden níže. Porovnejte data v datech s hodnotami bday. Všimněte si, že pro Johna je datum 1 Leden 1960 a hodnota pro bday je 0. Je to proto, že data jsou uložena interně v SAS jako počet dní od ledna 1,1960. Protože se Marie narodila před rokem 1960, hodnota bday pro ni je záporná (-1635).
OBS NAME BDAY 1 John 0 2 Mary -1635 3 Kate 1046 4 Mark -207
V aby bylo vidět data způsobem, který chápeme, že budete mít k formátování výstupu. Používáme date9. formát pro zobrazení dat ve tvaru ddmmmyyyy. To je uvedeno v příkazu formátu.
PROC PRINT DATA=dates; FORMAT bday date9. ;RUN;
Zde je výstup produkován proc tiskové prohlášení výše.
OBS NAME BDAY 1 John 01JAN1960 2 Mary 11JUL1955 3 Kate 12NOV1962 4 Mark 08JUN1959
podívejme se na následující data. Na první pohled to vypadá, že data jsou tak odlišná, že je nelze přečíst. Mají společné dvě věci:
1) všechny mají číselné měsíců,
2) všichni jsou seřazeny měsíc, den a pak rok.John 1 1 1960Mary 07/11/1955Joan 07-11-1955Kate 11.12.1962Mark 06081959
tato data lze číst ve stejném formátu, mmddyy11. Následuje příklad použití tohoto formátu v datovém kroku.
DATA dates; INPUT name $ 1-4 @6 bday mmddyy11.;CARDS;John 1 1 1960Mary 07/11/1955Joan 07-11-1955Kate 11.12.1962Mark 06081959;RUN;PROC PRINT DATA=dates; FORMAT bday date9. ;RUN;
výsledky výše proc tisku ukazují, že všechna data jsou správně přečíst.
OBS NAME BDAY 1 John 01JAN1960 2 Mary 11JUL1955 3 Joan 11JUL1955 4 Kate 12NOV1962 5 Mark 08JUN1959
k Dispozici je široká škála formátů je k dispozici pro použití při čtení dat do SAS. Následuje ukázka některých z těchto formátů.
Informat Description Range Width Sample-------- ----------- ----- ------- ------JULIANw. Julian date 5-32 5 65001 YYDDDDDMMYYw. date values 6-32 6 14/8/1963MONYYw. month and year 5-32 5 JUN64YYMMDDw. date values 6-32 8 65/4/29YYQw. year and quarter 4-32 4 65Q1
Zvažte následující údaje, v nichž je pořadí měsíc, den a rok.
7 1948 11 1 1960 110 1970 1512 1971 10
můžete Si přečíst tyto údaje s každou část dne v samostatné proměnné v datovém krok, který následuje.
DATA dates; INPUT month 1-2 year 4-7 day 9-10; bday=MDY(month,day,year);CARDS; 7 1948 11 1 1960 110 1970 1512 1971 10;RUN;PROC PRINT DATA=dates; FORMAT bday date9. ;RUN;
Všimněte si, že funkce mdy(měsíc,den,rok) v datovém kroku. Tato funkce slouží k vytvoření hodnoty data z jednotlivých komponent. Následuje výsledek postupu.
OBS MONTH YEAR DAY BDAY 1 7 1948 11 11JUL1948 2 1 1960 1 01JAN1960 3 10 1970 15 15OCT1970 4 12 1971 10 10DEC1971
Dvě číslice data
Zvažte následující údaje, které jsou stejné jako výše, s výjimkou, že pouze dvě číslice se používají k označení roku, a rok se objeví poslední.
7 11 18 7 11 48 1 1 6010 15 7012 10 71
Čtení dat je stejný, jak jsme právě udělali.
DATA dates; INPUT month day year ; bday=MDY(month,day,year);CARDS; 7 11 18 7 11 48 1 1 6010 15 7012 10 71;RUN;PROC PRINT DATA=dates; FORMAT bday date9. ;RUN;
výsledky proc tisku jsou uvedeny níže.
OBS MONTH DAY YEAR BDAY 1 7 11 18 11JUL1918 2 7 11 48 11JUL1948 3 1 1 60 01JAN1960 4 10 15 70 15OCT1970 5 12 10 71 10DEC1971
Dvě číslice letech práce tady, protože SAS předpokládá, cutoff (yearcutoff), než které hodnoty dvě číslice roky jsou interpretovány jako rok 2000 a výše a po, které jsou interpretovány jako 1999 a níže. Výchozí yearcutoff se liší pro různé verze SAS:
SAS 6.12 and before (YEARCUTOFF=1900)SAS 7 and 8 (YEARCUTOFF=1920)
možnosti prohlášení v programu, který sleduje změny yearcutoff hodnotu 1920. To způsobí, že ve dvou číselných letech nižší než 20 bude čteno jako po roce 2000. Spuštění stejného programu pak přinese různé výsledky, pokud je tato volba nastavena.
OPTIONS YEARCUTOFF=1920;DATA dates; INPUT month day year ; bday=MDY(month,day,year);CARDS; 7 11 18 7 11 48 1 1 6010 15 7012 10 71;RUN;PROC PRINT DATA=dates; FORMAT bday date9. ;RUN;
výsledky proc tisku jsou uvedeny níže. První pozorování se nyní čte jako vyskytující se v roce 2018 místo roku 1918.
OBS MONTH DAY YEAR BDAY 1 7 11 18 11JUL2018 2 7 11 48 11JUL1948 3 1 1 60 01JAN1960 4 10 15 70 15OCT1970 5 12 10 71 10DEC1971
Výpočty s uplynul data
SAS data proměnných provést výpočty zahrnující data velmi pohodlné. Například pro výpočet věku každého 1. ledna 2000 použijte následující převod v datovém kroku.
age2000=(mdy(1,1,2000)-bday)/365.25 ;
program se tento výpočet v kontextu vyplývá.
OPTIONS YEARCUTOFF=1900; /* sets the cutoff back to the default */DATA dates; INPUT name $ 1-4 @6 bday mmddyy11.; age2000 = (MDY(1,1,2000)-bday)/365.25 ;CARDS;John 1 1 1960Mary 07/11/1955Joan 07-11-1955Kate 11.12.1962Mark 06081959;RUN;PROC PRINT DATA=dates; FORMAT bday date9. ;RUN;
výsledky proc tisku jsou uvedeny níže. Proměnná AGE2000 nyní obsahuje věk v letech k 1. lednu 2000.
OBS NAME BDAY AGE2000 1 John 01JAN1960 40.0000 2 Mary 11JUL1955 44.4764 3 Joan 11JUL1955 44.4764 4 Kate 12NOV1962 37.1362 5 Mark 08JUN1959 40.5667
Další užitečné datum funkce
Existuje celá řada užitečných funkcí pro použití s data proměnných. Následuje seznam některých z těchto funkcí.
Function Description Sample-------- --------------------- -----------------month() Extracts Month m=MONTH(bday);day() Extracts Day d=DAY(bday) ;year() Extracts Year y=YEAR(bday);weekday() Extracts Day of Week wk_d=WEEKDAY(bday);qtr() Extracts Quarter q=QTR(bday);
následující program demonstruje použití těchto funkcí.
DATA dates; INPUT name $ 1-4 @6 bday mmddyy11.; m=MONTH(bday); d=DAY(bday) ; y=YEAR(bday); wk_d=WEEKDAY(bday); q=QTR(bday);CARDS;John 1 1 1960Mary 07/11/1955Joan 07-11-1955Kate 11.12.1962Mark 06081959;RUN;PROC PRINT DATA=dates; VAR bday m d y; FORMAT bday date9. ;RUN;PROC PRINT DATA=dates; VAR bday wk_d q; FORMAT bday date9. ;RUN;
proc tisknout výsledky jsou uvedeny níže. Nové proměnné obsahují měsíc, den, rok, den v týdnu a čtvrtletí.
OBS BDAY M D Y 1 01JAN1960 1 1 1960 2 11JUL1955 7 11 1955 3 11JUL1955 7 11 1955 4 12NOV1962 11 12 1962 5 08JUN1959 6 8 1959OBS BDAY WK_D Q 1 01JAN1960 6 1 2 11JUL1955 2 3 3 11JUL1955 2 3 4 12NOV1962 2 4 5 08JUN1959 2 2
Shrnutí
- Data jsou čteny s formáty data, nejčastěji date9. a mmddyy11.
- funkce Data lze použít k vytvoření hodnot data z jejich komponent (mdy (m,d, y)) a k extrahování komponent z hodnoty data (měsíc (), den () atd.).
- volba yearcutoff může být použita, pokud musíte číst dvouciferné roky.
Problémy se podívejte se na
- Data jsou smíchány v rámci pole taková, že žádný jediný formát data může přečíst. Řešení: Přečtěte pole jako znakové pole, Otestujte řetězec a použijte vstupní funkci a vhodný formát pro čtení hodnoty do proměnné data.
- neexistuje žádný formát schopný číst Datum. Řešení: přečtěte si datum jako součásti a pomocí funkce vytvořte hodnotu data.
- někdy výchozí hodnota pro yearcutoff není výchozí pro výše uvedenou verzi balíku. Řešení: Chcete-li zjistit aktuální nastavení pro yearcutoff, jednoduše spusťte program obsahující
proc OPTIONS OPTION=YEARCUTOFF; RUN;
výsledkem bude výstup obsahující aktuální hodnotu yearcutoff.