sas
SAS-indelingen
Zoeken…
Invoering
Informats en formaten worden gebruikt om SAS te vertellen hoe de gegevens respectievelijk moeten worden gelezen en geschreven. Informats worden vaak gebruikt in een datastap bij het lezen van gegevens uit een extern bestand. Informats worden zelden gebruikt in PROC's. Formaten worden vaak gebruikt in zowel gegevensstappen als PROC's.
Opmerkingen
SAS-indelingen zetten numerieke of tekenwaarden om in tekenwaarden. Een opmaak kan worden toegepast met behulp van een format
of put
instructie, die de manier verandert waarop een waarde wordt weergegeven, of met behulp van de put
functie om de opgemaakte waarde op te slaan in een nieuwe variabele.
Er zijn vier categorieën indelingen:
- Karakter - instrueert SAS om karaktergegevenswaarden uit tekenvariabelen te schrijven.
- Datum en tijd - instrueert SAS om gegevenswaarden te schrijven uit variabelen die datums, tijden en datetijden vertegenwoordigen.
- ISO 8601 - instrueert SAS om datum-, tijd- en datetime-waarden te schrijven met behulp van de ISO 8601-norm.
- Numeriek - geeft SAS opdracht numerieke gegevenswaarden te schrijven uit numerieke variabelen.
Formaten hebben meestal de vorm <formatname><w>.<d>;
, waarbij w
de breedte is (inclusief eventuele decimalen en het punt), waarbij d
het aantal decimalen is.
Gangbare datumnotaties (toegepast op SAS-datumwaarden):
-
date9.
bijv. 02AUG.2016 -
ddmmyyn8.
bijv. 02082016 -
ddmmyy8.
bijv. 02/08/16 -
yymmdd10.
bijv. 20160802 -
year4.
bijv. 2016
Algemene numerieke notaties (toegepast op getallen):
-
comma11.0
bijv. 1.234.567 -
comma12.2
bijv. 1.234.567,00 -
dollar11.2
bijv. $ 5.789.12 -
nlmnlgbp11.2
bijv. £ 2.468,02
Andere formaten:
-
$hex8.
, converteer string naar hex -
$upcase.
, tekenreeks omzetten in hoofdletters -
$quote.
, plaats een string tussen aanhalingstekens
Een volledige lijst met indelingen vindt u hier> https://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a001263753.htm
Met behulp van de opmaakverklaring
De format
past de gegeven opmaak alleen op de opgegeven variabele toe voor weergavedoeleinden , dwz de onderliggende waarde verandert niet.
data example1 ; Date = '02AUG2016'd ; /* stored as a SAS date, i.e. a number */ Date2 = '31AUG2016'd ; format Date monyy7. Date2 yymmddn8. ; run ;
Datum | date2 |
---|---|
AUG2016 | 20160831 |
De format-opdracht gebruiken om gegevens te groeperen
U kunt indelingen binnen een procedure toepassen, bijvoorbeeld om de groeperingen binnen een proc summary
of proc freq
.
SAS-datums groeperen
data example2 ; do Date = '01JUN2016'dt to '31AUG2016'dt ; Days = 1 ; output ; end ; run ; /* Summarise by year & month */ proc summary data=example2 nway ; class Date ; var Days ; output out=example2_sum (drop=_TYPE_ _FREQ_) sum= ; format Date yymmn6. ; /* e.g. 201606 */ run ;
Datum | dagen |
---|---|
201.606 | 30 |
201607 | 31 |
201.608 | 31 |
/* Summarise by month & year */ proc summary data=example2 nway ; class Date ; var Days ; output out=example2_sum2 (drop=_TYPE_ _FREQ_) sum= ; format Date monyy7. ; /* e.g. JUN2016 */ run ;
Datum | dagen |
---|---|
JUN2016 | 30 |
JUL2016 | 31 |
AUG2016 | 31 |
Het voordeel van het gebruik van een indeling is dat de natuurlijke sorteervolgorde behouden blijft.
sashelp.class
met sashelp.class
als voorbeeld dat u de frequentie van de eerste letter van elke naam wilt vergelijken. U kunt de functie substr()
gebruiken om de eerste letter te vinden en een proc freq
op de nieuwe variabele. Als alternatief kunt u de $1.
toepassen $1.
formaat naar de variabele Name
:
proc freq data=sashelp.class ; table Name ; format Name $1. ; run ;
Naam | COUNT |
---|---|
EEN | 7 |
B | 4 |
C | 2 |
enz. |
Aangepaste formaten
Aangepaste indelingen, ook wel door de gebruiker gedefinieerde indelingen genoemd, kunnen worden gemaakt en gebruikt zoals elke andere standaardindeling.
/*Create new character format for state variables*/
PROC FORMAT;
VALUE $statef 'CA' = 'California'
'MA' = 'Massachusetts'
'NY' = 'New York';
/*Once created, you can use your custom format in PROC and DATA steps*/
PROC PRINT DATA=table;
FORMAT state-var $statef.;
RUN;
De variabele state-var
wordt afgedrukt volgens het nieuwe formaat. De waarde 'CA'
wordt bijvoorbeeld afgedrukt als 'California'
. Als een waarde niet is opgemaakt, zoals 'CT'
, wordt die waarde afgedrukt zoals deze in de gegevensset wordt weergegeven.
Informats gebruiken om gegevens te lezen
Informats worden gebruikt om SAS te vertellen hoe de gegevens moeten worden ingelezen en worden geïdentificeerd met een informat
.
data test;
infile test.csv;
informat id $6.
date mmddyy10.
cost comma10.2
;
input @1 id
@7 date
@20 cost
;
run;
Informats en indelingen kunnen ook samen worden gebruikt om de gegevens in te lezen en uit te schrijven in een ander formaat, zoals met de onderstaande salarisvariabele:
DATA workers;
informat first last $16.;
informat salary 12.1;
informat birthdate 8.;
input
first $
last $
birthdate
salary;
format salary dollar10.;
datalines;
John Smith 19810505 54998.5
Jane Doe 19950925 45884.5
Frank James 19600222 70000.5
Jamie Love 19630530 292000.5
;
run;